簡體   English   中英

Python subprocess.check_output stderr用法

[英]Python subprocess.check_output stderr usage

嗨,我是Python的新手,我試圖了解stderr如何與子進程check_output一起使用。 我已經閱讀了子進程文檔,並且很難理解stderr的使用方式以及subprocess.STDOUT實際完成的內容。

我可以請一些幫助解釋stderr如何在這里使用的示例或參考資料嗎?

我已經使用stderr和沒有看到任何真正的差異嘗試了這些命令。

碼:

#!/usr/bin/python3
import subprocess

print(subprocess.check_output("echo Hello World!",
                              stderr=subprocess.STDOUT,
                              shell=True))

輸出:

# ./ex.py
b'Hello World!\n'

碼:

#!/usr/bin/python3
import subprocess

print(subprocess.check_output("gecho Hello World!",
                              stderr=subprocess.STDOUT,
                              shell=True))

輸出:

# ./ex.py
Traceback (most recent call last):
  File "./ex.py", line 6, in <module>
    shell=True))
  File "/usr/lib64/python3.3/subprocess.py", line 589, in check_output
    raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command 'gecho Hello World!' returned non-zero exit status 127

如果存在非零退出代碼, subprocess.check_output將引發您看到的異常。 這聽起來像你想要的是一個簡單的方法來讀取STDERR,在這種情況下最簡單的方法是使用subprocess.run和管道STDOUT和STDERR(例子在Windows中):

>>> p = subprocess.run(['cmd','/C','echo','hello','world'], stdout = subprocess.PIPE, stderr=subprocess.PIPE)
>>> p.stdout
b'hello world\r\n'

>>> p.stderr
b''

>>> p = subprocess.run(['cmd','/C','gecho','hello','world'], stdout = subprocess.PIPE, stderr=subprocess.PIPE)
>>> p.stdout
b''

>>> p.stderr
b"'gecho' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n"

如果您真的需要使用check_output,以下將忽略echo調用中的錯誤代碼並仍然打印錯誤(示例幾乎逐字地從文檔中獲取):

>>> print(subprocess.check_output('gecho hello& exit 0', stderr=subprocess.STDOUT, shell=True))
b"'gecho' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n"

或者在Linux中:

>>> print(subprocess.check_output('gecho hello; exit 0', stderr=subprocess.STDOUT, shell=True))
b'/bin/sh: 1: gecho: not found\n'

作為旁注,使用選項shell = True的子進程函數幾乎不是一個好主意。 這主要是出於安全考慮; 閱讀文檔以獲得完整的解釋。

暫無
暫無

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

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