如何在python中執行阻塞操作系統調用?如何在python中執行阻塞系統調用(並將其結果作爲字符串)
例如獲取linux「date」命令的輸出。
並將其字符串輸出結果放入字符串變量中。
親愛的Stackoverflow。
什麼是不清楚「操作系統調用」
什麼是不清楚「堵」
我懷疑誰「接近」甚至不看問題的人。
是否有解除問題的程序?
如何在python中執行阻塞操作系統調用?如何在python中執行阻塞系統調用(並將其結果作爲字符串)
例如獲取linux「date」命令的輸出。
並將其字符串輸出結果放入字符串變量中。
親愛的Stackoverflow。
什麼是不清楚「操作系統調用」
什麼是不清楚「堵」
我懷疑誰「接近」甚至不看問題的人。
是否有解除問題的程序?
爲了得到一個命令的輸出,使用check_output
,它具有優勢Popen
它如果命令失敗,引發一個異常:
from subprocess import check_output
output = check_output(["date"])
( 我認爲你不是在談論真實system calls。)
如果我想要一個真正的系統調用我打電話給我的母親大聲笑 – SHernandez
很有趣,check_output好像是一個便捷的包裝是不是? – SHernandez
是的,請參閱[subprocess](https://github.com/python/cpython/blob/master/Lib/subprocess.py#L588)模塊。儘管這很方便;) –
你可以做這樣的事情:
import subprocess
proc = subprocess.Popen(['date'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()
的第一個參數是POPEN您希望執行的命令行參數列表。後面的PIPE參數指示python捕獲命令的輸出。 communicate()
等待命令完成並以字符串形式返回進程的stdout和stderr。執行後,stdout
變量將包含來自子流程的文本。請注意,這種模式有一些警告(特別是在輸出量很大的情況下)。你可以在這裏瞭解更多:
這是一個非常好的答案,但是F.X.的方法更加方便,同時也很好地處理錯誤和異常。可能必須接受他的 – SHernandez
@SHernandez - 這是真的,但它並不適用於所有版本的python。我使用的代碼通常需要最低公分母。所以,我通常在需要的地方使用不太方便的方法和錯誤捕獲。最好的解決方案將取決於您的使用情況。 – matthewatabet
應該注意的是,最後一行中的stdout和stderr是在末尾帶有換行符的字節串。但同名函數調用的參數是操作系統管道對象,只是爲了防止混淆 – SHernandez
什麼是不清楚的問題?請刪除downvotes。 – SHernandez
酷評論bro。 –
@ magic-sudo我是一個downvote納粹我自己,但不是爲了樂趣 – SHernandez