我试图捕获由 调用的程序的错误消息subprocess.check_call
,但stderr
错误对象中的始终是None
.
这是一个简短的脚本,显示了这一点:
import subprocess
import sys
if '--fail' in sys.argv: # the script calls itself with this option, for the test
print('this is the error message', file=sys.stderr)
sys.exit(1)
try:
subprocess.check_call([sys.executable, sys.argv[0], '--fail'],
stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
print('Not failed?') # this neither happens nor is expected
except subprocess.CalledProcessError as err:
if err.stderr:
print(err.stderr.decode()) # this is what I expect
else:
print('<No error message>') # this is what happens
我有Python 3.10.12。
您根本没有与子进程通信,因此内容仍然缓冲在管道中。
的文档
check_call
有此通知:而不是这个:
使用run的更高级别 API :