Py2app использует либо консоль, либо графический интерфейс, но не оба?

Моя программа отлично работает при запуске через терминал или PythonLauncher. Моя программа использует как графический интерфейс, написанный через pyside, так и консоль терминала. Когда я оборачиваю свою программу с помощью py2app, запуск созданного файла .app дает только графический интерфейс, а не оболочку терминала. Поэтому моя программа не работает, потому что она не может вызывать подпроцессы в оболочке терминала, если оболочка терминала не открыта.

Любые идеи относительно того, как я могу открыть как оболочку терминала, так и графический интерфейс? Я предполагаю, что это ошибка с моими настройками setup.py или py2app. Вот мой setup.py

from setuptools import setup

APP = ['myProgram.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

... и вот команда терминала, которую я использую для компиляции моего приложения с помощью py2app

python setup.py py2app

Спасибо всем за помощь!


person Ian Zane    schedule 13.07.2013    source источник
comment
Терминал и графический интерфейс одновременно? Мне кажется ужасный дизайн! Разве вы не можете использовать отдельные окна, созданные из вашего графического интерфейса? В качестве альтернативы, почему бы вам просто не открыть новую командную строку? (Я не пользователь Windows, но это не должно быть сложно...).   -  person Bakuriu    schedule 13.07.2013
comment
Я на самом деле не могу. Мне нужно вызвать терминал с помощью subprocess.call, поэтому я относительно уверен, что окно терминала должно быть открыто. Кроме того, я на OS X, а не на Windows. По сути, мое приложение python работает, когда оно не скомпилировано в .app, но когда я скомпилирую его в одно, оно ломается, потому что не открывает экземпляр терминала для получения моих команд subprocess.call.   -  person Ian Zane    schedule 13.07.2013
comment
Насколько я знаю, subprocess.call не имеет ничего общего с терминалом. Пожалуйста, объясните, что вы подразумеваете под этим, потому что он не открывает экземпляр терминала для получения моих команд subprocess.call.   -  person Bakuriu    schedule 14.07.2013


Ответы (2)


Приложения, созданные py2app, являются пакетами приложений с графическим интерфейсом и не открывают окно терминала. Если вам действительно нужно окно терминала, вместо использования окна графического интерфейса для ввода вы можете запустить приложение из окна терминала ("MyApp.app/Contents/MacOS/MyApp", если ваше приложение называется MyApp).

КСТАТИ. Я не понимаю, что вы подразумеваете под «вызовом терминала с помощью subprocess.call». Запуск инструментов командной строки с использованием подпроцесса прекрасно работает в пакете приложений, если только вам не нужно взаимодействовать с этим процессом (например, если вы запускаете редактор TTY, такой как vim или emacs).

person Ronald Oussoren    schedule 15.07.2013
comment
Это, кажется, не работает для меня. Я не получаю никакого вывода, даже когда запускаю dist/MyApp.app/Contents/MacOS/MyApp - person user239558; 24.02.2015

Когда вы создаете setup.py с помощью апплета py2, вы можете попробовать использовать параметр --emulate-shell-environment:

python setup.py py2app --emulate-shell-environment

Мое приложение открывает окно терминала при запуске, если я использую эту опцию.

person user3131679    schedule 11.03.2017