【问题标题】:Run a subprocess in python and both show the output in "real time" and save it to a variable在 python 中运行一个子进程,两者都“实时”显示输出并将其保存到变量中
【发布时间】:2019-03-07 09:39:49
【问题描述】:

我希望能够从 python 代码运行一个子进程,并且两者都可以实时查看输出,并且一旦该进程完成,就会将输出保存在一个变量中

现在我做两件事之一

1) 在这种情况下,使用 subprocess.call 运行子进程,我会实时获得输出,但最后我没有变量中的输出(我想解析它并从中提取值)

2) 使用 subprocess.check_output 运行子进程,在这种情况下,我将输出保存在变量中,但如果我想查看它,则必须“手动”打印它

有没有办法让这两件事“在一起”?

希望清楚,如果需要,我可以添加我的代码

谢谢!!!

编辑:

这是我当前的代码

我添加了一个超时可选参数(默认值为 1200 并且还处理 shell(由于某种原因,如果我没有 shell=True,在 Linux 中工作的相同命令在 Windows 中不起作用)“模式”参数是我用来区分我想要“实时”输出的情况,我不必解析它和其他情况

我想知道是否有更清洁和更好的方法来实现相同的结果

【问题讨论】:

  • 您是否有任何无法运行的代码或您尝试过什么?
  • 我的代码正在运行,但我想知道是否有更好的方法来做到这一点,现在我正在做这样的事情

标签: python subprocess


【解决方案1】:

假设您正在尝试运行某个命令 your_command 您可以使用以下命令:

some_proc = subprocess.Popen(['your_command'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

stdout=subprocess.PIPE 会在成功时输出结果。之后,您可以按如下方式访问输出:

store_in_var = some_proc.stdout

现在你可以解析你的store_in_var

【讨论】:

    【解决方案2】:
    import subprocess
    from subprocess import PIPE
    
    comd = input('command here : ')
    comds = comd.split(' ')
    f = subprocess.run(comds, shell= True,stdout=PIPE, stderr=PIPE)
    result = f.stdout.decode()
    errors = f.stderr.decode()
    

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2011-11-08
      相关资源
      最近更新 更多