2010-10-06 91 views
0

我有一个linux应用程序,使用标准输入从命令行以交互方式运行以接受命令。我写了一个使用子进程的包装器来访问stdin,而应用程序却是背景的。我现在可以使用p.stdin.write(命令)将命令发送给它,但我该如何去监视它的响应?如何监视python中的子进程与标准输出?

+1

看起来像一个相关的链接:http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python – pyfunc 2010-10-06 06:11:38

回答

1

p.stdout中读取以访问该过程的输出。

根据过程的作用,您可能必须小心确保您不会阻止p.stdout,而p反过来阻止其stdin。如果你肯定知道它会在每次你写它的时候输出线,你可以简单地替代在这样的循环:

while still_going: 
    p.stdin.write('blah\n') 
    print p.stdout.readline() 

然而,如果输出是比较零星的,你可能想看看进入select模块以更灵活的方式在读写之间切换。

+0

我有一些麻烦理解如何使用选择。你知道任何与我的情况有关的例子吗? – dpcd 2010-10-06 06:31:55

+0

@dpcd有几种不同的方法可以使用select,这取决于代码的结构是如何构建的,哪种方式最好。这两个主要模式是“阻塞,直到这些文件中的任何一个变得可写为止......然后告诉我哪些是”和“不要阻塞,只要告诉我数据是否可用。这样我就不会意外地阻止我的进程通过在没有数据准备的文件上调用read()“ – Rakis 2010-10-06 12:55:34

+0

@dpcd哦,Python的'select()'是对标准POSIX'select()'的一个非常薄的包装。所有基于C语言的例子,你会发现,当谷歌搜索选择应用几乎相同的Python到C(Python只是返回列表,而不是位图)。那里有很多示例和教程。 – Rakis 2010-10-06 12:57:09

相关问题