在python中运行一个子进程,都以“实时”显示输出并将其保存到变量中

时间:2019-03-07 09:39:50

标签: python subprocess

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

现在我要做两件事之一

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

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

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

希望很明显,我可以根据需要添加代码

谢谢!!!

编辑:

这是我当前的代码

enter image description here

我添加了一个超时可选参数(默认值为1200,并且还处理了shell(由于某些原因,如果我没有shell = True,则在Linux中可以使用的相同命令在Windows中将无法使用))“ mode”参数是我用来区分需要“实时”输出而无需解析它的情况和其他情况的一种情况。

我想知道是否有一种更干净,更好的方法来达到相同的结果

2 个答案:

答案 0 :(得分:0)

假设您正在尝试运行某些命令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

答案 1 :(得分:0)

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()