为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2023-02-07 11:00:55
我正在尝试检查 t 是否等于“HTTP/1.1 200 OK”import ost = os.system("curl -Is onepage.com | head -1")print(t)但我从 os.system 得到的回应是HTTP/1.1 200 OK0我不知道如何去掉那个 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'
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

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

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

如果 shell 为 True,指定的命令将通过 shell 执行。如果您使用 Python 主要是为了增强它在大多数系统 shell 上提供的控制流,并且仍然希望方便地访问其他 shell 功能,例如 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'


查看完整回答
反对 回复 2023-02-07
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信