我如何从包含regexp的python调用shell命令?

时间:2011-10-21 15:25:41

标签: python shell

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

我写道:

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

但是我收到了错误

  

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

我想强制shell将“*”视为正则表达式而不是字符串。有没有办法实现这个?

2 个答案:

答案 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匹配的文件数组。