简体   繁体   中英

Run a subprocess in python and both show the output in “real time” and save it to a variable

I would like to be able to run a subprocess from python code and both see the output in real time and once the process is finished have the output in a variable

Right now I do one of either two things

1) Run subprocess using subprocess.call in that case I get the output in real time but I don't have at the end the output in a variable (I want to parse it and extract values from it)

2) Run subprocess using subprocess.check_output in that case I have the output in a variable but if I want to see it then I have to print it "manually"

Is there a way to get both things "together" ?

Hope it is clear, I can add my code if you need

Thanks !!!

EDIT:

This is my current code

在此处输入图片说明

I added a timeout optional parameter (Default value is 1200 and also deal with shell (For some reason same commands that work in Linux do not work in Windows if I don't have the shell=True) the "mode" parameter is the one that I use to differentiate the cases where I want the output in "real time" and I don't have to parse it and the other cases

I was wondering if there is a cleaner and better way to achieve same results

Assuming you are trying to run some command your_command You can use the following:

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

The stdout=subprocess.PIPE does stdout the result on success. Afterwards, you can access the output as follows:

store_in_var = some_proc.stdout

Now you can parse your store_in_var

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM