Python子进程获取子输出

时间:2010-02-09 01:32:50

标签: python multithreading subprocess parent

  

可能重复:
  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的子进程,但不知怎的,我无法将它们放在一起。你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

听起来你想要更像'期待'的东西。

结帐Pexpect

  

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

答案 1 :(得分:2)

使用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()