从Python - stderr 调用curl 与在命令行上运行时不同。为什么?

问题描述 投票:0回答:1

在命令行上针对不存在的域运行curl时,我收到预期的错误消息

$ curl https://doesnoexist.test/
curl: (6) Could not resolve host: doesnoexist.test

但是如果我在 Python 中做同样的事情,打印标准错误

import subprocess

proc = subprocess.Popen(['curl', 'https://doesnoexist.test/'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
outs, errs = proc.communicate()
print(errs)

然后我开始看到似乎是下载进度指示器,然后紧接着出现相同的错误消息

$ python curl.py
b'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  
Current\n                                 Dload  Upload   Total   Spent 
   Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:--
 --:--:-- --:--:--     0curl: (6) Could not resolve host: doesnoexist.test\n'

为什么?如何在Python中只获取错误消息?

(理想情况下,答案不仅适用于curl,而且更普遍,在运行其他进程时会发生类似的事情)

python curl subprocess
1个回答
1
投票

要抑制进度信息并仅捕获错误消息,您可以将

--silent
--show_errors
选项添加到
curl
命令:

import subprocess

proc = subprocess.Popen(['curl', '--silent', '--show-error', 'https://doesnoexist.test/'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
outs, errs = proc.communicate()
print(errs.decode('utf-8'))

输出:

curl: (6) Could not resolve host: doesnoexist.test

类似的选项可能可用于相同用例的其他命令行实用程序(当不直接通过终端运行时)。

© www.soinside.com 2019 - 2024. All rights reserved.