2012-09-25 40 views
2

我試過os.popen之類的方法。但它似乎不適合我。我想知道命令'echo xxxx''java -version'之間是否有任何不同,以及如何使用python代碼獲得'java -version'輸出。如何通過python獲得'java -version'輸出

+2

subprocess.check_output http://docs.python.org/library/subprocess.html#module-subprocess – avasal

+1

閱讀'subprocess'模塊的手冊。 –

+1

爲什麼沒有人閱讀[os.popen的文檔](http://docs.python.org/library/os.html#os.popen)?它說:「自2.6版棄用:此功能已過時,請使用子流程模塊。」 – Matthias

回答

6
import subprocess 
sp = subprocess.Popen(["java", "-version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
print sp.communicate() 
print sp.wait() 

是去真正的出路。

一個更簡單的方法可能是

print subprocess.check_output(["java", "-version"], stderr=subprocess.STDOUT) 
-2

是的,區別在於java -version轉到stderr流。嘗試popen3 http://docs.python.org/library/popen2.html

+1

「自2.6版棄用:此模塊已過時,請使用子流程模塊。」 – Matthias

+0

那麼,它仍然是常用的。大量的ppl使用os.popen,我懷疑它是否會在2.x分支中消失(現在已經差不多了)。 – CrazyCasta

+1

如果有東西被棄用,我不會推薦它。 – Matthias

1

區別在於java -version打印到stderr而不是stdout。您可以使用subprocess.Popen(更好)檢查命令的stderr或重定向到stdout手動stderr

java -version 2>&1 
+0

謝謝,它對我有用~~~ –