从python2代码调用python3代码

Mat*_*w G 6 python python-2.7 python-3.x

我正在使用wxPython工具包设计GUI,这意味着它是用python2编写的.但是,我想将python3用于实际的应用程序代码.我如何从GUI调用我的python3代码?

Mar*_*cin 17

  1. 通过管道或插座交谈

  2. 尽可能启用这样的python 3功能__future__或使用类似于six编写与两者兼容的代码库.

  3. 不要这样做.

最后,你确定你不能在Python 3中使用wxPython吗?在线文档中没有任何内容表明您不能.

  • 在我意识到仍有大量遗留python2代码之前,我决定在2011年学习Python.我被告知无数次只使用python2.在我学习python3的第一周,即使考虑编写python3代码,我还是被某人骂了一顿.我已经习惯了.令人难以置信的是令人失望,令人沮丧的是,大多数人似乎只是接受了这种鸡蛋和鸡蛋的情况.我喜欢Python,但说实话社区真是太糟糕了. (7认同)
  • @MatthewG你是我听过的唯一一个人.在任何情况下,没有理由你不能只使用python 2 - 在兼容性库之间,以及语言的相似性,这不应该是一个不合理的建议.您不必发誓对一个版本或另一个版本的忠诚度. (6认同)
  • 我想使用python3,因为它是该语言的最新版本.它自2008年以来一直存在,并且没有理由用旧语言开发全新的应用程序. (5认同)
  • @MatthewG那么,你为什么要使用python 3? (2认同)
  • @MatthewG最新和最伟大的不是一个原因.Python 2不是一些过时的语言 - 正如您的情况所示,它是一种具有主动开发库的语言,以及Python 3中不存在的大量库. (2认同)

ead*_*sjr 5

您可以将应用程序代码作为 shell 脚本运行。

from subprocess import call
exit_code = call("python3 my_python_3_code.py", shell=True)
Run Code Online (Sandbox Code Playgroud)

您也可以像往常一样传入终端参数。

arg1 = "foo"
arg2 = "bar"
exit_code = call("python3 my_python_3_code.py " + arg1 + " " + arg2, shell=True)
Run Code Online (Sandbox Code Playgroud)

如果您想从应用程序收集更多信息,您可以改为捕获标准输出,如下所述:捕获子进程输出

如果您想在两个方向上流畅地通信,管道或插座可能是最好的。

  • `shell=True` 是不必要的。`subprocess.call()` 等待脚本完成——它会挂起 GUI。OP 可能想要运行 * 多个 * 命令,即,`python3` 进程应该启动一次,然后你应该按照@Marcin 的回答中的建议使用管道/套接字其他 IPC 方法。这是 [Gtk 代码示例,展示了如何在 GUI 应用程序中读取子进程输出(使用线程或 async.io)](https://gist.github.com/zed/8a255e81eb87431c0e63)。这是 [Tkinter 代码示例 (async)](https://gist.github.com/zed/9294978) 和 [使用线程](https://gist.github.com/zed/42324397516310c86288) (2认同)