当前位置: 首页 > 面试题库 >

实时子进程。通过stdout和PIPE打开

年业
2023-03-14
问题内容

我试图stdoutsubprocess.Popen通话中抢夺,尽管我可以通过以下方式轻松实现此目标:

cmd = subprocess.Popen('ls -l', shell=True, stdout=PIPE)
for line in cmd.stdout.readlines():
    print line

我想stdout“实时”抓取。使用上述方法,PIPE等待获取所有内容stdout,然后返回。

因此,出于日志记录目的,这不符合我的要求(例如,“查看”发生的情况)。

stdout在运行时,有没有办法逐行获取?或者这是subprocess(必须等到PIPE关闭)的限制。

编辑 如果我切换readlines()readline()我只得到stdout(不理想)的最后一行:

In [75]: cmd = Popen('ls -l', shell=True, stdout=PIPE)
In [76]: for i in cmd.stdout.readline(): print i
....: 
t
o
t
a
l

1
0
4

问题答案:

您的解释器正在缓冲。在打印语句后,添加对sys.stdout.flush()的调用。



 类似资料:
  • 问题内容: 这是此问题的后续措施,但是如果我想将参数传递给,如何实时获取输出?这就是我目前拥有的;我也尝试从模块中替换为,这只会导致脚本挂起。 在我不必通过的前一个问题中,建议我使用,没有空间输送任何东西到。 附录:这适用于传输,但是我只能在最后看到输出,并且我想查看传输发生时的详细信息。 问题答案: 为了实时从子流程中获取标准输出,您需要准确确定所需的行为;具体来说,您需要确定是要逐行处理还是逐

  • 我试图与一个进程通信(该进程本身会写入stdin和stdout,以便在终端中与用户交互),并在C中读取它的stdin和写入它的stdout。 因此,我尝试以编程方式替换shell用户。一个methapohrical示例:假设出于某种原因我想在C中使用VIM。然后我还需要编写命令(stdout)并从编辑器(stdin)中读取内容。 起初我认为这可能是一项微不足道的任务,但似乎没有标准的方法<代码>i

  • [已编辑] 2个选项,用于处理子流程的标准输出。Popen是stdout=“a_file\u name”和stdout=subprocess.PIPE

  • 本文向大家介绍Python多进程通信Queue、Pipe、Value、Array实例,包括了Python多进程通信Queue、Pipe、Value、Array实例的使用技巧和注意事项,需要的朋友参考一下 queue和pipe的区别: pipe用来在两个进程间通信。queue用来在多个进程间实现通信。 此两种方法为所有系统多进程通信的基本方法,几乎所有的语言都支持此两种方法。 1)Queue & J

  • 问题内容: 在 pipe 上使用2个 队列 在进程之间进行通信有什么优势(如果有)? 我正在计划使用python模块。 问题答案: 最大的好处是队列是进程和线程安全的。管道不是:如果两个不同的进程试图读取或写入pipe的同一端,则会发生不良情况。队列的抽象级别也比管道更高,这在您的特定情况下可能有优势,也可能没有优势。

  • 问题内容: 我想捕获并显示通过Python的子流程调用的流程的输出。 我以为我可以将文件状对象作为参数stdout和stderr传递 我可以看到它访问了属性-因此它正在处理对象。但是,永远不会调用该方法。我的方法是否完全无效或我只是缺少什么? 更新: 我还想工作的是ANSI控制字符,用于移动光标并覆盖以前的输出内容。我不知道这是否是正确的术语,但这是我的意思的一个示例:我正在尝试使一些GIT自动化