Python子进程获取孩子的输出[重复]

Posted

技术标签:

【中文标题】Python子进程获取孩子的输出[重复]【英文标题】:Python subprocess get child's output [duplicate] 【发布时间】:2011-01-14 15:10:34 【问题描述】:

可能的重复:How to get output from subprocess.Popen()Retrieving the output of subprocess.call()

这是我的问题。我有一个名为 device_console 的可执行文件。 device_console 为设备提供命令行界面。在 device_console 中,可以运行四个命令:status、list、clear 和 exit。每个命令都会产生一个输出。举个例子:

[asdfgf@localhost ~]$ device_console

device_console> list

File A

File B

device_console> status
Status: OK

device_console> clear
All files cleared

device_console> list
device_console> exit

[asdfgf@localhost ~]$

作为测试的一部分,我想获取每个命令的输出。我想为此使用 Python。我正在查看 Python 的子进程,但不知何故我无法将它们放在一起。你能帮忙吗?

【问题讨论】:

所有这些的重复:***.com/search?q=%5Bpython%5D+subprocess+output。具体来说,***.com/questions/1388753/… 只是众多完全相同的副本之一。 【参考方案1】:

使用subprocess module。示例:

import subprocess

# Open the subprocess
proc = subprocess.open('device_console', stdin=subprocess.PIPE, stdout.subprocess.PIPE)

# Write a command
proc.stdin.write('list\n')

# Read the results back -- this will block until a line of input is received
listing = proc.stdout.readline()

# When you're done, close the input stream so the subprocess knows to exit
proc.stdin.close()

# Wait for subprocess to exit (optional) and get its exit status
exit_status = proc.wait()

【讨论】:

【参考方案2】:

听起来你想要更像“期望”的东西。

查看Pexpect

"Pexpect 是一个纯 Python 模块 使 Python 成为更好的工具 控制和自动化其他 程式。 Pexpect 类似于 Don Libes Expect 系统,但 Pexpect 作为一个不同的界面 更容易理解。预期是 基本上是一个模式匹配系统。 它运行程序并监视输出。 当输出匹配给定模式时 Pexpect 可以像人类一样做出反应 输入回复。”

【讨论】:

谢谢。我也会研究 Pexpect。

以上是关于Python子进程获取孩子的输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从Python中的imagemagick子进程读取输出[重复]

子进程命令Python的实时输出状态[重复]

使用子进程通过head -1获取grep的输出[重复]

子进程中的python getoutput()等价物[重复]

如何在python子进程模块中执行用户输入(如日期)作为命令[重复]

从 python 子进程获取输出并向其发出命令