python - 无法从 os.system() 响应中获取 0

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

我正在尝试检查 t 是否等于“HTTP/1.1 200 OK”

import os
t = os.system("curl -Is onepage.com | head -1")
print(t)

但是我从 os.system 得到的回应是

HTTP/1.1 200 OK
0

我不知道如何去掉那个 0,我已经尝试过

x = subprocess.check_output(['curl -Is onepage.com | head -1'])
,但它给了我这个错误:

Traceback (most recent call last):
  File "teste.py", line 3, in <module>
    x = check_output(['curl -Is onepage.com | head -1'])
  File "/usr/lib/python3.8/subprocess.py", line 411, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/usr/lib/python3.8/subprocess.py", line 489, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.8/subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1702, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'curl -Is onepage.com | head -1'
python unix curl
2个回答
1
投票

os.system
仅返回生成进程的退出代码,零通常表示成功。

您对使用

check_output
的直觉是正确的,因为它返回进程的标准输出,并通过抛出异常来处理非零退出代码。您的示例失败,因为给定的命令需要在 shell 中运行,这不是默认的。根据文档

如果shell为True,指定的命令将通过 壳。如果您主要使用 Python 来实现以下目的,这会很有用: 它比大多数系统 shell 提供了增强的控制流,并且仍然需要 方便访问其他外壳功能,例如外壳管道, 文件名通配符、环境变量扩展和 ~ 扩展 到用户的主目录。

以下内容按预期工作:

import subprocessing
output = subprocess.check_output("curl -Is www.google.com | head -1", shell=True)
print(output)

这给出:

b'HTTP/1.1 200 OK\r\n'

0
投票

如果我使用没有打印功能的代码,它对我有用:

import os
t = os.system("curl -Is onepage.com | head -1")
t
© www.soinside.com 2019 - 2024. All rights reserved.