2013-01-23 168 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)