如何从Python调用包含正则表达式的shell命令?
我想知道怎么在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()会返回一个数组,里面是所有符合通配符匹配的文件。