Lord_of_Rings
@Lord_of_Rings
Python developer

Как запустить часть кода в новом окне консоли?

В общем нужно что-то типа threading или subprocess, только чтобы процесс открывался в новом окне консоли, а основной код продолжал работать, и при его завершении, тот процесс не убился. В Windows временное решение выглядит так: os.system('start python main.py <arguments>') Определенному аргументу соответствует определенная функция, нет аргументов - выполняется основной код.
Как это сделать покрасивее, и чтобы работало не только в Windows, но и в Linux?
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@rPman
Для linux совсем стандартно не получится, так как для терминала не договорились о каком то умолчании (для браузера или открытия файлов от типа договорились, типа xgd-open, даже договорились об опции Terminal=true для зарегистрированных типов, но вот что бы отдельно запустить - нет), хотя бы потому что есть установки без GUI и терминал там консольный, или к примеру пользователь хочет screen а не отдельное окно.
-----------------
Изучил вопрос, можно одной командой узнать, что именно запускать, т.е. что установлено как терминал по умолчанию (их может быть много и отличаться будут даже на одной и того же дистрибутива в зависимости от версии, экспериментов пользователя и кучи других условий):
update-alternatives --query x-terminal-emulator
выдаст машиночитаемый список терминалов, первый - тот что по умолчанию:
spoiler
Name: x-terminal-emulator
Link: /usr/bin/x-terminal-emulator
Slaves:
 x-terminal-emulator.1.gz /usr/share/man/man1/x-terminal-emulator.1.gz
Status: auto
Best: /usr/bin/xfce4-terminal.wrapper
Value: /usr/bin/xfce4-terminal.wrapper

Alternative: /usr/bin/gnome-terminal.wrapper
Priority: 40
Slaves:
 x-terminal-emulator.1.gz /usr/share/man/man1/gnome-terminal.1.gz

Alternative: /usr/bin/koi8rxterm
Priority: 20
Slaves:
 x-terminal-emulator.1.gz /usr/share/man/man1/koi8rxterm.1.gz

Alternative: /usr/bin/lxterm
Priority: 30
Slaves:
 x-terminal-emulator.1.gz /usr/share/man/man1/lxterm.1.gz

Alternative: /usr/bin/uxterm
Priority: 20
Slaves:
 x-terminal-emulator.1.gz /usr/share/man/man1/uxterm.1.gz

Alternative: /usr/bin/xfce4-terminal.wrapper
Priority: 40
Slaves:
 x-terminal-emulator.1.gz /usr/share/man/man1/xfce4-terminal.1.gz

Alternative: /usr/bin/xterm
Priority: 20
Slaves:
 x-terminal-emulator.1.gz /usr/share/man/man1/xterm.1.gz
Тут смело бери первый встречаемый Link: и запускай с ключом:
/строка/с/командой/запуска/терминала -e твоя_команда

само собой в коде у тебя должен быть if от текущей ОС, для windows ты уже знаешь что делать, только осторожно, если после start будет путь в ковычках то нужно он посчитает это заголовком терминала и нужно писать вот так:
start "заголовок окна" "путь_до_программы_с_пробелами...."


p.s. с MACOS как-нибудь сам разберешься
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
По нормальному это просто разделить на два сервиса и запускать их
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 12:16
60000 руб./за проект
23 нояб. 2024, в 09:59
2000 руб./в час
23 нояб. 2024, в 08:36
2000 руб./за проект