2011-04-08 66 views

回答

1

可能有兩個問題,爲什麼你沒有在標準輸出中得到任何輸出:

  1. 該進程將所有輸出轉儲到stderr。
  2. 系統不知道如何執行"imp -help"

對於第一問題的解決方案是容易的:使用參數stderr = subprocess.PIPE捕獲標準錯誤。

第二個解決方案也很簡單,但解釋時間更長一點:子過程不會猜測太多,只會嘗試將整個字符串作爲一個命令執行。這意味着,就你而言,它會嘗試執行"imp -help"作爲一個命令。它不會嘗試執行命令"imp"和參數"-help"。你必須分別明確地告訴子進程命令和參數。

從Python documentation上子:

ARGS應該是一個字符串,或者程序參數的順序 。該程序 執行通常是在 的ARGS序列,或者如果 字符串指定字符串的第一個項目,...

這意味着你必須分隔命令和參數,並收拾他們一起一個序列。這個:"imp -help"應該看起來像這樣:["imp", "-help"]。閱讀關於子流程的documentation以獲取有關分離命令和參數的複雜細節。

下面是代碼應該如何看起來像:

import subprocess 
p=subprocess.Popen(["imp", "-help"], 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    stdin=subprocess.PIPE) 
out,err=p.communicate() 

注意:您還鍵入p.communicate,而不是p.communicate()。我認爲這是你的問題中的一個錯字,而不是你的代碼中。

+0

是的,它的工作原理,但你可以告訴我原因, – koko 2011-04-08 09:35:13

+0

和out是空的,但err有輸出。 – koko 2011-04-08 09:35:45

+0

通過使用,錯誤= p.communicate你不叫commincate你只參考它 – 2011-04-08 10:24:01