2012-01-11 124 views
1

打印出返回值,我用Python調用的bash執行另一個bash腳本:如何避免使用os.system()在python

begin = int(sys.argv[1]) 
result = os.system("/tesladata/isetools/cdISE.bash %s" %begin) 

我打印result後,它不僅給我的輸出還有退貨狀態(這裏的0)。 如果我只需要輸出,我該怎麼辦?

而且,爲了好奇,有多少種方法可以在Python中調用bash?如果有人能夠提供一些如何使用它們的參考資料,我會很高興,到目前爲止我只找到os.system()os.popen()

+0

你的第二個問題是在這裏(http://stackoverflow.com/questions/3479728/is-it-good-style-to-call-bash-commands-within-a-python-script-using-os-討論systemb)和(http://stackoverflow.com/questions/4256107/running-bash-commands-in-python)Here – Bry6n 2012-01-11 16:49:38

回答

7

其實,result只是作爲一個整數返回狀態。你所調用的東西寫入stdout,它從你的程序繼承,所以你會立即看到它被打印出來。它永遠不可用於您的程序。

退房的子模塊文檔的更多信息:

http://docs.python.org/library/subprocess.html

包括捕獲輸出,並以不同的方式調用炮彈。

+4

具體來說,它看起來像他希望[subprocess.check_output(http://docs.python.org/library/subprocess.html#subprocess.check_output) – 2012-01-11 17:05:56

3

您可以通過管道的任何輸出只是扔掉到/dev/null

begin = int(sys.argv[1]) 
result = os.system("/tesladata/isetools/cdISE.bash %s > /dev/null" %begin) 

如果你不想或者顯示錯誤,改變>2&>丟棄stderr爲好。

2

你的Python腳本沒有bash腳本的輸出可言,但只有「0」,它返回。 bash腳本的輸出與python腳本的輸出流相同,並在打印result的值之前打印。如果你不想看到0,不要打印結果。

+0

感謝您的回覆。我想你是對的,但是如果我想從bash腳本獲得輸出並將其存儲在其他地方呢? – 2012-01-11 16:53:43

+0

@dazhuangcao如果你想輸出,使用os.popen或子 – 2012-01-11 17:19:20