Как определить, был ли исполняемый файл запущен из активной оболочки или нет?

#python #python-3.x #windows #powershell #cmd

#python #python-3.x #Windows #powershell #cmd

Вопрос:

Я пишу некоторый код на Python, который я, наконец, упаковываю в исполняемый файл ( myexec.exe ) pyinstaller . Это программа командной строки, которая может быть запущена

  • из оболочки ( cmd или powershell выполняется, и запускается изнутри пользователя myexec.exe )
  • или из другой программы (в частности, AutoHotkey), как myexec.exe

Я хотел бы иметь возможность определить, в каком случае я нахожусь, чтобы завершить программу с input() помощью или нет — идея заключается в том, что если она запускается из оболочки, она может немедленно завершиться (вывод будет виден в оболочке), а если нет, то окно должно оставаться для пользователя посмотрите выходные данные (а затем нажмите Enterдля выхода).

Есть ли способ проверить эти случаи из Python?

Комментарии:

1. вы можете попробовать getattr(sys, 'frozen', False) ? это было бы верно, если файл заморожен (exe), исходя из этого, вы можете написать ветвление для незамороженного или замороженного

2. @python_user: это всегда будет исполняемый файл, просто запущенный по-разному (я обновил вопрос, чтобы сделать его более понятным)

3. @WoJ: На какую оболочку вы ссылаетесь? Оболочка POSIX? Маловероятно, что вы будете использовать его в Windows.

4. Пожалуйста, пометьте свой вопрос с помощью powershell или cmd , в зависимости от того, какой из них вы хотите использовать.

5. Просто добавьте некоторый флаг командной строки (например, -ah ) в скрипт AutoHotkey и проверьте, существует ли этот ключ в вашем приложении с помощью sys.argv

Ответ №1:

Просто добавьте аргумент командной строки при запуске из AutoHotkey, и вы можете проверить этот аргумент внутри программы следующим образом:

 import sys

if '--from_script' in sys.argv:
    print('launched from script')