使用Python子进程执行Shell命令

时间:2018-09-08 00:30:27

标签: 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 OS。有人可以指出我正确的方向吗?

2 个答案:

答案 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)
相关问题