我想通过 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/