2015-07-12 15 views
1

如何在python中執行阻塞操作系統調用?如何在python中執行阻塞系統調用(並將其結果作爲字符串)

例如獲取linux「date」命令的輸出。

並將其字符串輸出結果放入字符串變量中。


親愛的Stackoverflow。

什麼是不清楚「操作系統調用」

什麼是不清楚「堵」

我懷疑誰「接近」甚至不看問題的人。

是否有解除問題的程序?

+0

什麼是不清楚的問題?請刪除downvotes。 – SHernandez

+0

酷評論bro。 –

+0

@ magic-sudo我是一個downvote納粹我自己,但不是爲了樂趣 – SHernandez

回答

1

爲了得到一個命令的輸出,使用check_output,它具有優勢Popen它如果命令失敗,引發一個異常:

from subprocess import check_output 
output = check_output(["date"]) 

我認爲你不是在談論真實system calls

+0

如果我想要一個真正的系統調用我打電話給我的母親大聲笑 – SHernandez

+0

很有趣,check_output好像是一個便捷的包裝是不是? – SHernandez

+0

是的,請參閱[subprocess](https://github.com/python/cpython/blob/master/Lib/subprocess.py#L588)模塊。儘管這很方便;) –

0

您可以撥打:

import os 

os.system('date') 
+0

這是很好,但錯過了「字符串結果」部分。結果是整數。 – SHernandez

2

你可以做這樣的事情:

import subprocess 
proc = subprocess.Popen(['date'], 
         stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE) 
stdout, stderr = proc.communicate() 

的第一個參數是POPEN您希望執行的命令行參數列表。後面的PIPE參數指示python捕獲命令的輸出。 communicate()等待命令完成並以字符串形式返回進程的stdout和stderr。執行後,stdout變量將包含來自子流程的文本。請注意,這種模式有一些警告(特別是在輸出量很大的情況下)。你可以在這裏瞭解更多:

https://docs.python.org/2/library/subprocess.html

+0

這是一個非常好的答案,但是F.X.的方法更加方便,同時也很好地處理錯誤和異常。可能必須接受他的 – SHernandez

+0

@SHernandez - 這是真的,但它並不適用於所有版本的python。我使用的代碼通常需要最低公分母。所以,我通常在需要的地方使用不太方便的方法和錯誤捕獲。最好的解決方案將取決於您的使用情況。 – matthewatabet

+0

應該注意的是,最後一行中的stdout和stderr是在末尾帶有換行符的字節串。但同名函數調用的參數是操作系統管道對象,只是爲了防止混淆 – SHernandez

相關問題