是否可以将我在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秒)以接收该数据字符串。
答案 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。