【问题标题】:Python subprocess write new line to stdin until process endsPython子进程将新行写入stdin,直到进程结束
【发布时间】:2013-02-27 18:09:16
【问题描述】:

我创建了一个子进程使用

subprocess.Popen(shlex.split(command), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

它调用的命令会打印各种信息,然后等待\n再打印更多信息。最终,当\n 被按下的次数足够多时,该过程将结束。我需要能够以编程方式模拟按下\n 直到进程结束,以及捕获所有输出。我不希望将输出打印到终端。我希望它被返回并设置为一个变量。

我该怎么做?

【问题讨论】:

  • 换行数是否必须是常数?或者它可以在运行之间改变吗?
  • 不推荐使用 popen 或 popen2。使用 subprocess 模块 - 它为您提供了一个统一的接口和流来读取/写入数据。
  • @SeanMcSomething 呃,OP 使用subprocess
  • @Nathaniel 还需要检查其他内容 - 当通过 subprocess 调用时,它是否真的会进行换行提示,而不是直接运行它?许多“分页”命令行程序在直接调用而不是从终端调用时实际上并不使用分页。
  • 我还不确定。

标签: python shell subprocess


【解决方案1】:

如果你只需要给stdin写一次,你可以使用

proc = subprocess.Popen(..., stdin = subprocess.PIPE)
proc.stdin.write('\n')

但是,如果您需要等待提示或以更复杂的方式与子流程交互,请使用pexpect。 (pexpect 适用于任何 POSIX 系统,或带有 Cygwin 的 Windows。)

【讨论】:

    【解决方案2】:

    试试这个方法

    from subprocess import Popen, PIPE
    import shlex
    with open (filename, 'w') as fileHandle
    proc = Popen(shlex.split(command), stdin = PIPE, stdout = PIPE, stderr  = PIPE)
    out, err = proc.communicate(input = '\n')
    print out, err
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2012-11-19
      • 1970-01-01
      相关资源
      最近更新 更多