import subprocess
p=subprocess.Popen("imp -help",stdout=subprocess.PIPE,stdin=subprocess.PIPE)
out,err=p.communicate
的出來是null
但像 「sqlplus -help
」 其他Oracle命令, 「rman -help
」 工作正常
import subprocess
p=subprocess.Popen("imp -help",stdout=subprocess.PIPE,stdin=subprocess.PIPE)
out,err=p.communicate
的出來是null
但像 「sqlplus -help
」 其他Oracle命令, 「rman -help
」 工作正常
可能有兩個問題,爲什麼你沒有在標準輸出中得到任何輸出:
"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()
。我認爲這是你的問題中的一個錯字,而不是你的代碼中。
是的,它的工作原理,但你可以告訴我原因, – koko 2011-04-08 09:35:13
和out是空的,但err有輸出。 – koko 2011-04-08 09:35:45
通過使用,錯誤= p.communicate你不叫commincate你只參考它 – 2011-04-08 10:24:01