2016-02-15 60 views
-1

我試圖在python中將shell命令的結果寫入文件。該命令是從變量中讀取的。它的工作原理,只要我把命令直接進入喜歡這裏的蟒蛇命令:在python的子進程中執行shell命令

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
subprocess.call(["cat", "/etc/passwd"], stdout=FIRST_OPEN) 

但只要我嘗試讀取一個變量的命令,它不工作了:

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD='cat /etc/passwd' 
subprocess.call([FIRST_CMD], stdout=FIRST_OPEN) 

我該如何做?

回答

0

注意兩個來源都不相同。或者你存儲命令列表:

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD=['cat', '/etc/passwd'] 
subprocess.call(FIRST_CMD, stdout=FIRST_OPEN) 

,或者你使用它之前分割你的命令:

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD='cat /etc/passwd' 
subprocess.call(FIRST_CMD.split(), stdout=FIRST_OPEN) 

就個人而言,我建議你第一個選項。

+0

感謝的第一個例子中的偉大工程。我是Python新手,不同的括號有點混亂。 – stka

0

當你說[FIRST_CMD],你正在創建一個如下所示的列表:["cat /etc/passwd"],而不是["cat", "/etc/passwd"]。要改變這種情況,你可以使用使用FIRST_CMD.split()而不是[FIRST_CMD]。您還可以將FIRST_CMD定義爲["cat", "/etc/passwd"]

0

嘗試定義一個數組,然後傳遞沒有括號的數組名稱。

您的代碼將是

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD=['cat', '/etc/passwd'] 
subprocess.call(FIRST_CMD, stdout=FIRST_OPEN)