python - 使用Python子进程执行shell命令

标签 python subprocess

我想通过 python 脚本执行以下命令:

sudo cat </dev/tcp/time.nist.gov/13

我可以通过命令行完全执行这个命令。但是,当我使用子进程执行它时,出现错误:

Command ['sudo','cat','</dev/tcp/time.nist.gov/13'] returned non-zero exit status 1

我的代码如下

import subprocess
subprocess.check_output(['sudo','cat','</dev/tcp/time.nist.gov/13'])

正如我上面提到的,通过命令行执行命令会给出所需的输出,没有任何错误。我正在使用 Raspbian Jessie 操作系统。有人能指出我正确的方向吗?

最佳答案

您根本不想为此使用subprocess

这个命令的真正作用是什么?它使用 bash 扩展打开网络套接字,通过 cat(1) 将其重新路由到标准输出,并决定以 root 身份运行 cat。在 Python 中,您实际上并不需要 bash 扩展、或 /bin/cat 或 root 权限来执行这些操作;您正在寻找 socket图书馆。

这是一个全 Python 等效项:

#!/usr/bin/env python3
import socket
s = socket.create_connection(('time.nist.gov', 13))
try:
    print(s.recv(4096))
finally:
    s.close()

(请注意,我的所有实验都表明此连接有效,但白天服务器会立即关闭来响应。例如,更简单的 shell 调用 nc time.nist.gov 13 也会返回空字符串。 )

关于python - 使用Python子进程执行shell命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231021/

相关文章:

python - 从 Mac Os X 全局路径中删除已安装的 Python 3.5

python - 使用 subprocess 命令调用 R 脚本,但 r 脚本中的 Library() 命令阻止它运行

python - 如何使用子进程停止由单个脚本生成的所有子进程

python - 如何将整数数组映射到另一个整数

python - flask +Sqlite : Strings that are integers return as type int?

python - Flask+Apache 和 500 错误

python - 更改目录中文件的名称: Python

python-2.7 - 处理由 Python 代码产生的 C++ 子进程引起的段错误

python - 子进程和 psutil : how to get a list out of subprocess. check_output?

python - 如何确定通过 os.system 启动的进程的 pid