Python:如何将2.7模块导入3.4程序?

时间:2014-07-02 18:38:31

标签: python python-2.7 python-3.x import

问题:

是否可以将我在python 2.7中编写的模块导入到我编写的3.4程序中?

背景:

我尝试过这样做,并且正如预期的那样,一旦看到第一个SyntaxError: Invalid Syntax语句而不是3.4 print "string literal",就会抛出print()。还有一些其他不兼容的代码段,例如import Tkinter而不是tkinter。 2.7模块必须保留在2.7中,因为其中一个依赖项似乎不适用于3.X(switchvox api的python绑定)。

我正在构建一个显示应用程序,它将调用其配置文件中指定的任何模块,并在tkinter小部件中显示该模块的输出(字符串,或将来可能是dict)。我的程序需要做的就是导入2.7模块并调用一次函数(每x秒)以接收该数据字符串。

2 个答案:

答案 0 :(得分:3)

你可以使你的python 2.7代码兼容3.4 - 这样你可以从3.4导入它并使用相同的类和函数。

对于运行,你必须使用python 2.7在不同的进程上运行它 - 使用子进程。 假设main27.py有以下行:

print 1

要使用子流程运行它,请执行以下操作:

import subprocess
cmd = [r'c:\python27\python.exe', 'main27.py']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

比在stdout中你有以下输出:

1

对于更复杂的数据交换,您可以使用json或pickle使用文件。

答案 1 :(得分:0)

确实可以使您的代码与这两个版本兼容。印刷语句是显而易见的,可能更令人讨厌的。

假设您有以下Python 2.x代码:

name = "beautiful"
print "Hallo"
print "I mean, hallo ", name

第一行在两个版本中都能正常工作。第二行,可以成为:

print("Hallo")

这两个版本兼容。请注意,您可以使用单引号或双引号。

最后一行需要一点技巧,否则,Python 2也会打印括号。为了使它在Python 2中以与在Python 3中相同的方式工作,您必须从模块顶部的 future 导入 print_function

总之,这是双兼容代码:

#Works in Python 2.x or Python 3.x
from __future__ import print_function

print("Hallo")
print("I mean, hallo ", name)

有关详细信息,请参阅此cheat sheet