Python3 и subprocess.Popen - как получить и распарсить вывод?

senglory

Новичок
Пользователь
Авг 17, 2020
7
0
1
Подскажите как , используя subprocess.Popen, запустить приложение в отдельном окне, в основном ждать его завершения, а после этого взять и распарсить весь stdoutput из закрытого окна?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример:


Python:
# файл test_script.py
import time

for i in range(1, 6):
    print(i)
    time.sleep(1)
    if i == 4:
        raise ValueError
Python:
import subprocess


# запускаем test_script.py
process = subprocess.Popen(['python', 'test_script.py'],
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)
# ждем завершения
stdout, stderr = process.communicate()

# получаем stdout и stderr
print(stdout.decode().strip())
if stderr:
    print(stderr.decode().strip())
 

senglory

Новичок
Пользователь
Авг 17, 2020
7
0
1
Проблема в том, что я вызываю этот код из Python TK, и никакого окна терминала с вторым процессом не показывается. А как процесс в новом окне стартовать?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Проблема в том, что я вызываю этот код из Python TK, и никакого окна терминала с вторым процессом не показывается. А как процесс в новом окне стартовать?
Второго терминала и не должно показывать. Просто когда процесс отработает в консоли покажет его стандартный вывод и ошибки если они были.
 

senglory

Новичок
Пользователь
Авг 17, 2020
7
0
1
Второго терминала и не должно показывать. Просто когда процесс отработает в консоли покажет его стандартный вывод и ошибки если они были.


А кк быть если мне таки нужно увидеть отдельное окно с дочерним приложением? Как его запустить таким образом?
 

senglory

Новичок
Пользователь
Авг 17, 2020
7
0
1
Отвечаю сам себе - надо запустить дочерний процесс через xterm

Python:
p1 = subprocess.run(["xterm", "-e", cmd], capture_output=True)

Тогда выполнение основного процесса остановится пока не будет закрыто новое окно xterm. А вывод из дочернего можно стандартным образом перенаправить в файл, который прочитать после закрытия окна.
 

Форум IT Специалистов