如何从python中调用包含regexp(即cat filename*
)的shell命令。
我写道:
pid = subprocess.Popen(["cat", filename + "*"])
但是我收到了错误
cat filename *没有这样的文件或目录。
我想强制shell将“*”视为正则表达式而不是字符串。有没有办法实现这个?
答案 0 :(得分:6)
使用底层shell扩展你的整体:
pid = subprocess.Popen(["cat",filename+"*"], shell=True)
或者,在运行命令之前使用glob.glob
扩展参数:
import glob
pid = subprocess.Popen(["cat"] + glob.glob(filename + "*"))
答案 1 :(得分:4)
首先,它不是正则表达式,它似乎是你想要执行的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 + "*"));
glob.glob()返回与globbing匹配的文件数组。