如何在 python 中存储它打印到 stdout 的 os.system 的返回值? [复制]

Posted

技术标签:

【中文标题】如何在 python 中存储它打印到 stdout 的 os.system 的返回值? [复制]【英文标题】:How to store the return value of os.system that it has printed to stdout in python? [duplicate] 【发布时间】:2011-10-08 10:27:30 【问题描述】:

我正在编写一个 python 脚本来检查特定 IP / 端口的活动连接数。为此,我使用 os.system('my_command') 来获取输出。 os.system 返回我传递的命令的退出状态(0 表示命令返回没有错误)。 如何将 os.system 抛出给 STDOUT 的值存储在变量中?这样这个变量就可以在后面的函数中用于计数器。 像 subprocess 之类的东西,os.popen 可以提供帮助。有人可以建议吗?

【问题讨论】:

【参考方案1】:
import subprocess
p = subprocess.Popen('my_command', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, error = p.communicate()

【讨论】:

你提到的第三行不是在括号里吗?比如, (out, error) = p.communicate() 然后说 print "结果是:", out 不,在 Python 中,您不需要括号。元组可以隐式创建并自动打包和解包。是的,你可以这样做print 'The output was', out, 'and the error was', error 好的,明白了。这是执行以下 netstat 命令的正确语法吗 -> result = subprocess.Popen(["netstat -plant | awk \'print $4\' | grep %s:%s | wc -l' %(ip ,port)"], stdout=subprocess.PIPE, stderr= subprocess.PIPE) ?我收到一个错误:文件“/usr/lib/python2.7/subprocess.py”,第 672 行,在 init errread, errwrite) 文件“/usr/lib/python2.7/subprocess. py",第 1202 行,在 _execute_child raise child_exception OSError: [Errno 2] No such file or directory 为什么我会这样? 请编辑代码并用反引号 ``` 括起来,以便可读。 试试这个result = subprocess.Popen('''sh -c "netstat -plant | awk \'print $4\' | grep %s:%s | wc -l' %(ip,port)"''') 编辑:或者用shell=True 试试@Jakob-Bowyer 建议如下。需要,因为您不只是运行一个命令,而是使用 shell 的管道 | 功能。【参考方案2】:
import subprocess
p = subprocess.Popen('my_command', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, error = p.communicate()

【讨论】:

【参考方案3】:
netstat -plant | awk 'print $4' | grep %s:%s | wc -l

您可以使用 Python 进行拆分、grepping 和计数:

process = subprocess.Popen(['netstat', '-plant'], stdout=subprocess.PIPE)

num_matches = 0

host_and_port = "%s:%s" % (ip, port)

for line in process.stdout:
    parts = line.split()
    if parts[3] == host_and_port: # or host_and_port in parts[3]
        num_matches += 1


print num_matches

【讨论】:

这也解决了我的问题;但@agf 的回答是一个班轮【参考方案4】:
a=os.popen("your command").read()

新结果存储在变量a :)

【讨论】:

正确的对我不起作用,但这个很完美!

以上是关于如何在 python 中存储它打印到 stdout 的 os.system 的返回值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python3如何打印进度条

如何将“stdout”重定向到标签小部件?

Subprocess.Popen:将 stdout 和 stderr 克隆到终端和变量

在没有flush()和新行的子进程输出上进行非阻塞读取

python 用于从文本文件中提取电子邮件地址的python脚本。您可以将其传递给多个文件。它将电子邮件地址打印到stdout,on

如何从 Pig 中的 Python UDF 打印?