我想通过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 OS。有人可以指出我正确的方向吗?
答案 0 :(得分:2)
您根本不想使用subprocess
。
此命令的真正作用是什么?它使用bash扩展名打开网络套接字,通过 cat (1)馈送它以将其重新路由到标准输出,并决定以root身份运行cat。您实际上不需要bash扩展名或/bin/cat
或root特权即可在Python中执行任何上述操作;您正在寻找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
还会返回空字符串。)
答案 1 :(得分:1)
尝试一下:
import subprocess
com = "sudo cat </dev/tcp/time.nist.gov/13"
subprocess.Popen(com, stdout = subprocess.PIPE, shell = True)