我明天要参加 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 上使用终端。
如果您在交互式解释器中尝试,您可以看到发生了什么:
>>> compile(open('test.py').read(), 'read.py', 'exec')
<code object <module> at 0x10b916130, file "read.py", line 1>
内置编译器将源代码行编译为代码对象。 要实际运行代码对象,您需要 exec 它:
>>> codeobj = compile(open('test.py').read(), 'read.py', 'exec')
>>> exec(codeobj)
Hello, world!
Hello, world!
>>>
请注意,Python 2 和 Python 3 之间存在一些差异,主要是
exec
在 Py2 中是一个语句,但在 Py3 中是一个内置函数。 以上应该适用于任一情况。