Я использую модуль подпроцесса для запуска команды bash.Я хочу отобразить результат в режиме реального времени, , включая , когда новая строка не добавлена, но вывод все еще изменен.
Я использую Python 3. Мой код выполняется с подпроцессом, но я открыт для любого другого модуля.У меня есть код, который возвращает генератор для каждой новой добавленной строки.
import subprocess
import shlex
def run(command):
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
while True:
line = process.stdout.readline().rstrip()
if not line:
break
yield line.decode('utf-8')
cmd = 'ls -al'
for l in run(cmd):
print(l)
Проблема возникает, например, с командами вида rsync -P file.txt file2.txt
, которые показывают индикатор выполнения.
Например, мы можем начать с создания большого файла в bash:
base64 /dev/urandom | head -c 1000000000 > file.txt
Затем попробуйте использовать python для отображения команды rsync:
cmd = 'rsync -P file.txt file2.txt'
for l in run(cmd):
print(l)
Сэтот код, индикатор выполнения печатается только в конце процесса, но я хочу напечатать прогресс в режиме реального времени.