使用Python子进程执行shell命令

问题描述 投票:1回答:2

我想通过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操作系统。有人能指出我正确的方向吗?

python subprocess
2个回答
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
投票

尝试一下:

import subprocess

com = "sudo cat </dev/tcp/time.nist.gov/13"

subprocess.Popen(com, stdout = subprocess.PIPE, shell = True)
© www.soinside.com 2019 - 2024. All rights reserved.