Перенаправить вывод команды из cmd в переменную в Python 3 - PullRequest
0 голосов
/ 15 октября 2018

Я хочу получить вывод скрипта python, который выполняется для запуска в cmd, в переменную в скрипте хоста.Я частично могу это сделать, но не получаю желаемого результата.Пожалуйста, ребята, перед тем как понизить голосование и закрыть этот вопрос, обратите внимание, что это отличается от других вопросов, касающихся той же проблемы

Вот код, который я написал как мой скрипт, который нужно запустить:

import click  #-->pip install click
import sys
import time
#number of iterations taken
iters = 5
#record the starting time
start = time.time()
#iterate through loop
for j in range(1, iters + 1):
    print(f"iteration {j} out of {iters}.")
    #Generate progressbar
    with click.progressbar(range(1)) as bar:
        for i in bar:
            pass
    #End of Progressbar
#Record the Ending time
end = time.time()
print(f"Execution took approximately {round((end-start), 3)} seconds") #print the time taken rounded off to 3 decimals

Вот то, что мне нужно (я получаю вывод, когда я запускаю скрипт изначально):

iteration 1 out of 5.
  [####################################]  100%
iteration 2 out of 5.
  [####################################]  100%
iteration 3 out of 5.
  [####################################]  100%
iteration 4 out of 5.
  [####################################]  100%
iteration 5 out of 5.

Обратите внимание, что я хочу, чтобы вывод сохранялся в моей переменной каждый раз, когда печатается новый символна экране.то есть в реальном времени.

вот код, который я написал, используя подпроцессы для получения выходных данных файла:

import subprocess
from subprocess import run, PIPE
cmd = 'python iter.py'
output = subprocess.run(cmd, shell=True, universal_newlines=True, stdout=PIPE, stderr=PIPE) #variable that i want to store the value in.
print(output.stdout)

Но, к сожалению, он выводит только это:

iteration 1 out of 5.

iteration 2 out of 5.

iteration 3 out of 5.

iteration 4 out of 5.

iteration 5 out of 5.

Execution took approximately 0.001 seconds

Ясно, что потерял свой индикатор прогресса! , и это важно для того, над чем я работаю!Как я могу убедиться, что в переменной хранится даже индикатор выполнения.

ПРИМЕЧАНИЕ.

1 Ответ

0 голосов
/ 15 октября 2018

Индикатор выполнения будет отображаться только в терминале.

https://click.palletsprojects.com/en/7.x/api/#click.progressbar

По умолчанию этот индикатор выполнения не будет отображаться, если файл не является терминалом.

...