簡體   English   中英

通過subprocess.check_output()調用時將打印安裝到終端

[英]mount printing to terminal when called with subprocess.check_output()

根據子流程文檔subprocess.check_output(...)應該返回流程的輸出,並且如果返回碼為非零,則引發CalledProcessError異常,並且輸出位於output屬性中。

如果我嘗試使用諸如subprocess.check_output(["ls"])類的東西作為字符串,則可以很好地實現此目的。 但是,當我嘗試

subprocess.check_output(shlex.split("mount -t cifs //server/share /local_rep"))

它直接打印到終端“安裝錯誤(13):權限被拒絕,請參考mount.cifs(8)手冊頁(例如man mount.cifs)”,並且引發的異常的輸出屬性為空-正確設置了returncodecmd

我該如何做,以便什么都沒有直接輸出到終端,並且錯誤消息存儲在輸出中

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

“大部分”將其參數直接傳遞給Popen構造函數:

class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0),

其中默認的stdin/stdout/stderr=None表示“不會發生重定向;子級的文件句柄將從父級繼承”。 有人注意到subprocess.check_output subprocess.check_output(...)沒有stdout作為參數。 這是因為stdout在內部使用-這是從中獲取返回值或輸出屬性的地方。 但是, stderr=None仍然是默認值,這意味着在這種情況下,錯誤將直接打印到終端,並且不會被check_output()並返回異常。

一種可能的解決方案是將stderr=subprocess.STDOUT傳遞給subprocess.check_output(...)以便將錯誤消息發送到STDOUT ,因此不將其打印到終端,並在發生異常的情況下存儲在輸出中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM