Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子流程中的Shell扩展?_Python_Shell_Python 2.6 - Fatal编程技术网

Python 子流程中的Shell扩展?

Python 子流程中的Shell扩展?,python,shell,python-2.6,Python,Shell,Python 2.6,可能重复: 使用Python2.6子流程模块,我需要在使用前一个子流程调用生成的src.rpm文件上运行一个命令 不幸的是,我使用的规范文件不一致,因此我对src.rpm的文件名应该是什么样子只有模糊的概念(例如,我知道包的名称和名为“{package}-{version}.src.rpm”的扩展名,但不知道版本) 但是,我知道在我正在查找的目录中只有一个src.rpm文件,因此我可以使用如下命令调用mock mock{options}*.src.rpm 让它在shell中工作,但子流程似乎不

可能重复:

使用Python2.6子流程模块,我需要在使用前一个子流程调用生成的src.rpm文件上运行一个命令

不幸的是,我使用的规范文件不一致,因此我对src.rpm的文件名应该是什么样子只有模糊的概念(例如,我知道包的名称和名为“{package}-{version}.src.rpm”的扩展名,但不知道版本)

但是,我知道在我正在查找的目录中只有一个src.rpm文件,因此我可以使用如下命令调用mock

mock{options}*.src.rpm

让它在shell中工作,但子流程似乎不想接受扩展。我曾尝试使用(shell=True)作为subprocess.call()的参数,但即使它起作用,我还是宁愿避免它

我怎样才能得到这样的东西

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


要运行?

请使用
glob
包:

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

通配符*必须由SHELL解释。当您运行subprocess.call时,默认情况下它不会加载shell,但您可以将它作为参数指定为
shell=True

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

我认为您遇到的问题是,在创建命令之前,操作系统会处理通配符文件名,因此您必须自己查找文件名并在命令行上传递所有文件名。您可能还想尝试调用subprocess.Popen,我不确定它是否能解决您的问题,本教程展示了一个示例:您可以通过
glob.glob('*.src.rpm')
获取文件名列表,该列表将返回一个列表。然后你只需要在那里预先准备一个
mock
。。。