我有一个linux应用程序,使用标准输入从命令行以交互方式运行以接受命令。我写了一个使用子进程的包装器来访问stdin,而应用程序却是背景的。我现在可以使用p.stdin.write(命令)将命令发送给它,但我该如何去监视它的响应?如何监视python中的子进程与标准输出?
回答
从p.stdout
中读取以访问该过程的输出。
根据过程的作用,您可能必须小心确保您不会阻止p.stdout
,而p
反过来阻止其stdin
。如果你肯定知道它会在每次你写它的时候输出线,你可以简单地替代在这样的循环:
while still_going:
p.stdin.write('blah\n')
print p.stdout.readline()
然而,如果输出是比较零星的,你可能想看看进入select
模块以更灵活的方式在读写之间切换。
我有一些麻烦理解如何使用选择。你知道任何与我的情况有关的例子吗? – dpcd 2010-10-06 06:31:55
@dpcd有几种不同的方法可以使用select,这取决于代码的结构是如何构建的,哪种方式最好。这两个主要模式是“阻塞,直到这些文件中的任何一个变得可写为止......然后告诉我哪些是”和“不要阻塞,只要告诉我数据是否可用。这样我就不会意外地阻止我的进程通过在没有数据准备的文件上调用read()“ – Rakis 2010-10-06 12:55:34
@dpcd哦,Python的'select()'是对标准POSIX'select()'的一个非常薄的包装。所有基于C语言的例子,你会发现,当谷歌搜索选择应用几乎相同的Python到C(Python只是返回列表,而不是位图)。那里有很多示例和教程。 – Rakis 2010-10-06 12:57:09
- 1. 监视进程标准输出不一定使用CR/LF
- 2. 如何读取VB6中的子进程的标准输出?
- 3. 的Linux 3.0:与管道标准输入执行子进程/标准输出
- 4. 是否有可能输出到监视流而不是标准输入,标准输出和标准错误? (python)
- 5. 防止子进程的子进程写入标准输出
- 6. 如何重定向一个子进程的标准输出?
- 7. 进程通信中的管道标准输入/标准输出。
- 8. 获取派生进程的标准输出/标准错误在子进程
- 9. Python子进程.Popen无法使用标准输出
- 10. Python:从后台子进程获取标准输出
- 11. Python子进程标准输出不读取
- 12. 在linux中监视nohup进程/将标准输出重定向到文件?
- 13. 如何在不通信的情况下读取python子进程标准输出
- 14. 写入到标准输入并从标准输出中读取长时间运行的子进程中的python
- 15. python子流程输出到标准输出
- 16. Python运行守护进程子进程和读取标准输出
- 17. 将父进程的控制台(标准输出,标准错误等)输出重定向到子进程(反向)
- 18. 如何永久地将子进程输出打印到标准输出。
- 19. 在Python中的流标准输出/标准输出
- 20. 获取node.js中所有嵌套子进程的标准输出
- 21. 处理溢出标准输出的子进程
- 22. 使用Paramiko的标准输出作为标准输入与子流程
- 23. 使用python中的子进程重定向标准输出速度非常慢
- 24. 将文件用作标准输入和标准输出进行子流程
- 25. 在标准输入,标准输出和标准错误中的监视器字节C
- 26. 为外部程序包产生的Python子进程捕获标准输出
- 27. C:如何重定向命名管道标准输入/输出子进程的
- 28. 如何从子进程读取标准输出,当后者不刷新其标准输出?
- 29. Python - Supervisor如何登录标准输出 -
- 30. 通过标准输入与标准输出stdout和stdr在Python中的交互
看起来像一个相关的链接:http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python – pyfunc 2010-10-06 06:11:38