4

可能重复:
Python 子进程通配符用法

使用 Python 2.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())

跑步?

4

2 回答 2

8

使用glob包:

import subprocess    
from glob import glob
subprocess.call(["mock"] + glob("*.src.rpm"))
于 2013-01-23T15:21:22.280 回答
4

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

subprocess.call("mock *.src.rpm".split(), shell=True)
于 2013-01-23T15:41:51.953 回答