我如何从python调用shell命令,其中包括regexp



如何从python调用包含regexp(即cat filename*)的shell命令。

我写的

:

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

但是我得到一个错误

cat filename* no such file or directory.

我想强制shell将"*"视为regexp而不是字符串。有什么办法实现这一点吗?

使用底层shell来扩展globs:

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

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

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

首先,它不是正则表达式,它的shell扩展(glob),你似乎想要执行。这意味着您应该调用/bin/sh来执行cat。下面的代码可以达到这个效果:

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

现在/bin/sh将为您执行星号展开,您将得到所需的结果。

或者你可以使用globbing库自己做globbing扩展(即做shell所做的工作):

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

globb .glob()返回匹配globing的文件数组。

相关内容

最新更新