подпроцесс запускается в фоновом режиме и построчно записывает вывод в файл - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть два файла:

main.py

import subprocess
import shlex


def main():
    command = 'python test_output.py'
    logfile =  open('output', 'w')
    proc = subprocess.Popen(shlex.split(command), stdout=logfile)


if __name__ == "__main__":
    main()

и test_output.py

from time import sleep
import os

for i in range(0, 30):
    print("Slept for => ", i+1, "s")
    sleep(1)
os.system("notify-send completed -t 1500")

Выход процесса записан в logfileкак только дочерний процесс завершен.Есть ли способ:

  1. Запустить дочерний процесс из main и выйти из него (как сейчас).
  2. Продолжать запуск дочернего процесса в фоновом режиме.
  3. Когда дочерний процесс выдает результат, немедленно запишите его в logfile.(Не ждите завершения дочернего процесса, как это происходит сейчас.)

Есть другие вопросы ( как этот ), где решение дано для чтения строклинии, но они заставляют main.py ждать.Можно ли делать все в фоновом режиме, не заставляя main.py ждать?

1 Ответ

0 голосов
/ 13 февраля 2019

Оба буфера обработчика файлов в качестве подпроцесса могут быть установлены в «буферизацию строки», где символ новой строки вызывает пересылку буфера каждого объекта.Это можно сделать, установив для параметра буфера значение 1, см. Команду open () и подпроцесс .

. Необходимо убедиться, что дочерний процесс не будетбуфер сам по себе.Видя, что вы также запускаете скрипт Python, вам нужно либо реализовать это в коде, например, flush = True для оператора печати:

print(this_and_that, flush=True)

Source

Credit

...