2013-07-15 2 views
3

Я проектирую графический интерфейс с помощью инструментария wxPython, что означает, что он написан на python2. Тем не менее, я хочу использовать python3 для фактического кода приложения. Как я могу назвать код python3 из графического интерфейса?Позвоните в код python3 из кода python2

ответ

13
  1. Обсуждение через трубу или гнездо

  2. Включить такие, Python 3 функции, как вы можете из __future__ или использовать библиотеку как six писать код, который совместим с обоими.

  3. Не делайте этого.

Наконец, вы уверены, что не можете использовать wxPython в Python 3? В онлайн-документах ничего не говорится, что вы не можете.

+0

Предлагаемый список расширился. 1: [Основные методы межпроцессной связи] (http://en.wikipedia.org/wiki/Inter-process_communication#Main_IPC_methods). – Tadeck

+0

Версия wxPython, поддерживающая python3, все еще находится в разработке. Я содрогаюсь, чтобы подумать, как далеко позади достойный GUI-строитель, такой как wxGlade, поддерживает версию pxon3 wxPython. –

+2

@MatthewG Итак, почему вы хотите использовать python 3? – Marcin

4

Вы можете запустить код приложения как сценарий оболочки.

from subprocess import call 
exit_code = call("python3 my_python_3_code.py", shell=True) 

Вы также можете передать аргументы терминала, как обычно.

arg1 = "foo" 
arg2 = "bar" 
exit_code = call("python3 my_python_3_code.py " + arg1 + " " + arg2, shell=True) 

Если вы хотите, чтобы собрать больше информации обратно из приложения вы можете вместо того, чтобы захватить стандартный вывод, как описано здесь: Capture subprocess output

Если вы хотите жидко общаться в обоих направлениях трубы или гнездо, вероятно, лучше.

+1

'shell = True' не требуется.'subprocess.call()' ждет завершения скрипта - он повесит GUI. OP, вероятно, хочет запускать * несколько команд *, то есть процесс 'python3' должен запускаться один раз, а затем вы должны использовать другие методы IPC для pipe/socket, как это предлагается в ответе @ Marcin. Вот пример кода Gtk, который показывает, как читать вывод подпроцесса в приложении GUI (используя потоки или async.io)] (https://gist.github.com/zed/8a255e81eb87431c0e63). Вот [Пример кода Tkinter (async)] (https://gist.github.com/zed/9294978) и [с помощью потоков] (https://gist.github.com/zed/42324397516310c86288) – jfs

Смежные вопросы