Как получать вывод subprocess.run() во время выполнения?

Использую cmd Rar и хочу во время архивации получать stdout и обрабатывать процент архивации.
Как я понял:
run = subprocess.run(..., stdout=subprocess.PIPE)
И я могу прочитать print(run.stdout)
только уже по факту выполнения?
Как, допустим, добавить функцию обработчик, чтобы я мог во время работы программы обрабатывать run.stdout?
  • Вопрос задан
  • 500 просмотров
Решения вопроса 2
@wintreist Автор вопроса
Вот такой код наклепал я, если нужен именно subprocess.run(), может кому пригодится
import subprocess as sub
import threading as th
import time
 
def startrar():
    with open("test.log", "wb+") as file:
        rar = sub.run('"C:\\Program Files\\WinRAR\\Rar.exe" a -r -ep1 -v1g "D:\\mysqlrar" "D:\\Аудиокниги\\book"',
           shell=True, stdout=file, stderr=sub.PIPE)
 
def printpipe():
    while True:
        with open("test.log", "rb") as file:
            print(file.read().decode('cp1251'))
        time.sleep(1)
 
threads = []
threads.append(th.Thread(target=startrar))
threads.append(th.Thread(target=printpipe))
 
for i in threads:
    i.start()
Ответ написан
Комментировать
import subprocess

# Run the program and capture its output
process = subprocess.Popen(['program', 'arg1', 'arg2'], stdout=subprocess.PIPE)

# Read the output of the program in real-time
while True:
    output = process.stdout.readline()
    if output == b'' and process.poll() is not None:
        break
    if output:
        print(output.strip())

# Print the return code of the program
print(process.returncode)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы