2013-01-23 132 views
2

可能重复:
Python subprocess wildcard usage壳牌扩张在Python子

使用Python 2.6子模块,我需要对我与建设的src.rpm文件运行命令先前的子流程调用。

不幸的是,我正在处理不一致的spec文件,所以我只是对src.rpm的文件名应该是什么样子有一个模糊的概念(例如,我知道包的名称和扩展名在名为“{package} - {version} .src.rpm”的东西中,但不是版本)。

但是我知道,我只会在我要找目录中一个文件的src.rpm,这样我就可以像

mock {options} *.src.rpm

调用模拟一个命令和它的工作在shell中,但子进程似乎不想接受扩展。我试过使用(shell = True)作为subprocess.call()的参数,但即使它工作,我宁愿避免它。

如何获得类似

subprocess.call("mock *.src.rpm".split())

运行?

+0

我认为你正在运行到这个问题是因为通配符文件名被处理OS创建命令之前,所以你必须自己查找文件名,并将它们全部通过命令行传递。 –

+0

您可能还想尝试调用subprocess.Popen,但我不确定它是否能解决您的问题,但本教程显示了一个示例:http://www.dreamsyssoft.com/python-scripting- tutorial/shell-tutorial.php –

+0

你可以通过'glob.glob('*。src.rpm')'得到文件名列表,它将返回一个列表。那么你只需要在那里预先设置一个“模拟”...... – mgilson

回答

6

使用glob包:

import subprocess  
from glob import glob 
subprocess.call(["mock"] + glob("*.src.rpm")) 
1

通配符*必须由shell来解释。当您运行subprocess.call,默认情况下它不会加载一个外壳,但你可以给它shell=True作为参数:

subprocess.call("mock *.src.rpm".split(), shell=True)