如何从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的文件数组。