代码之家  ›  专栏  ›  技术社区  ›  Mark Roddy

使用Python通过STDIN/STDOUT启动和控制外部进程

  •  7
  • Mark Roddy  · 技术社区  · 17 年前

    我试图完成的流程是:

    1. 启动外部进程
    2. 迭代一些步骤
    3. 关闭外部进程的stdin,以向外部进程指示执行已完成。

    process = subprocess.Popen([PathToProcess], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    for i in xrange(StepsToComplete):
        print "Forcing step # %s" % i
        process.communicate(input='\n')
    

    当我运行上述代码时,'n'不会传递给外部进程,而且我永远不会超过步骤#0。代码在process.constructe()处阻塞,不再继续。我错误地使用了communicate()方法?

    此外,我该如何实现“等待外部进程写入新行”的功能?

    2 回复  |  直到 6 年前
        1
  •  9
  •   David Walker Christopher    14 年前

    with process:将数据发送到stdin。阅读 进程终止。可选 输入参数应该是字符串 被发送到子进程,或无, 如果不应向发送数据 孩子。

    相反,你只想给孩子的stdin写信。然后在你的循环中阅读。

    更像是:

    process=subprocess.Popen([PathToProcess],stdin=subprocess.PIPE,stdout=subprocess.PIPE);
    for i in xrange(StepsToComplete):
        print "Forcing step # %s"%i
        process.stdin.write("\n")
        result=process.stdout.readline()
    

        2
  •  0
  •   Glyph    17 年前

    你可以使用Twisted,通过使用 reactor.spawnProcess LineReceiver .