如何从Python调用包含正则表达式的shell命令?

2 投票
2 回答
2389 浏览
提问于 2025-04-17 04:46

我想知道怎么在Python里运行一个包含正则表达式的命令,比如说 cat filename*

我写了:

pid = subprocess.Popen(["cat", filename + "*"])

但是我遇到了一个错误

cat filename* 没有这样的文件或目录。

我想让命令行把“*”当作正则表达式来处理,而不是当作普通字符串。有没有什么办法可以做到这一点?

2 个回答

6

使用底层的命令行工具来展开你的通配符:

pid = subprocess.Popen(["cat",filename+"*"], shell=True)

或者,你可以使用 glob.glob 来在运行命令之前展开你的参数:

import glob
pid = subprocess.Popen(["cat"] + glob.glob(filename + "*"))
4

首先,你要知道这不是正则表达式,而是你想执行的“壳扩展”(也叫通配符匹配)。这意味着你需要用/bin/sh来执行cat命令。下面的代码应该能解决你的问题:

pid = subprocess.Popen(["/bin/sh", "-c", "cat", filename + "*"]);

这样一来,/bin/sh就会为你处理星号(*)的扩展,你就能得到想要的结果。

另外,你也可以使用通配符库自己进行扩展(也就是做壳本来要做的事情):

pid = subprocess.Popen(["cat"] + glob.glob(filename + "*"));

glob.glob()会返回一个数组,里面是所有符合通配符匹配的文件。

撰写回答