Задать вопрос

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

Использую cmd Rar и хочу во время архивации получать stdout и обрабатывать процент архивации.
Как я понял:
run = subprocess.run(..., stdout=subprocess.PIPE)
И я могу прочитать print(run.stdout)
только уже по факту выполнения?
Как, допустим, добавить функцию обработчик, чтобы я мог во время работы программы обрабатывать run.stdout?
  • Вопрос задан
  • 949 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 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)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
22 янв. 2025, в 04:08
6000 руб./за проект
21 янв. 2025, в 23:55
20000 руб./за проект
21 янв. 2025, в 23:35
80000 руб./за проект