终端中的Python编译

时间:2014-06-12 17:23:08

标签: python compiler-construction compilation compiler-errors

我明天参加CodeForces竞赛,规则说Python是用以下行编译的(其中%1是文件名):

python -c "compile(open('%1').read(), '%1', 'exec')"

我尝试使用此行编译测试文件,但它根本不做任何事情:

import sys
a = sys.stdin.readline()
sys.stdout.write(a)

但是,当我使用python test.py

进行编译时,该程序可以正常工作

如何使此测试文件与上面的编译行一起使用?

编辑:我在mac上使用终端。

1 个答案:

答案 0 :(得分:4)

如果您在交互式解释器中尝试,可以看到发生了什么:

>>> compile(open('test.py').read(), 'read.py', 'exec')
<code object <module> at 0x10b916130, file "read.py", line 1>

compile built-in将源代码行编译为代码对象。要实际运行代码对象,您需要exec它:

>>> codeobj = compile(open('test.py').read(), 'read.py', 'exec')
>>> exec(codeobj)
Hello, world!
Hello, world!
>>>

请注意,Python 2和Python 3之间存在一些差异,主要是exec是Py2中的语句,而Py3中是内置函数。上述内容应该适用于。