Как я могу открыть терминал, выполнить на нем скрипт python, а затем дождаться его окончания? - PullRequest
1 голос
/ 25 марта 2020

По сути, мне нужно создать функцию, которая открывает новый терминал, выполняет на нем скрипт python и после этого ожидает его завершения. Из того, что я читал в Интернете, лучший способ сделать это - использовать подпроцесс библиотеки Python. Тем не менее, я нашел его очень сложным в использовании. Когда я запускаю следующий код:

def function():
    cmd = "gnome-terminal; python3 simple_action_client.py"
    subprocess.check_output(cmd, shell=True)
    print("I'm done!")

Печать выполняется после открытия терминала, что означает, что функция «check_output» ожидает только выполнения первой части cmd.

По сути, я хотел бы сделать следующее:

def function():
    terminal_command = "gnome-terminal"  
    script_command = "python3 script.py"
    subprocess.run(terminal_command, shell = True)
    subprocess.check_output(script_command, shell = True)
    print("I'm done!")

Но когда я делаю что-то подобное, скрипт не запускается на новом терминале, и я хочу, чтобы он беги туда.

Возможно ли это сделать? Спасибо вам за помощь!

1 Ответ

3 голосов
/ 25 марта 2020

Вы объединяете команды для запуска в локальной оболочке, используя

def function():
    cmd = "gnome-terminal; python3 simple_action_client.py"
    subprocess.check_output(cmd, shell=True)
    print("I'm done!")

Вам необходимо настроить строку cmd, чтобы gnome-терминал мог выполнить команду

def function():
    cmd = "gnome-terminal --wait -- python3 simple_action_client.py"
    subprocess.check_output(cmd, shell=True)
    print("I'm done!")

Обратите внимание на «-» вместо «;» и "--wait" для ожидания команды внутри оболочки для выхода

...