我明天参加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上使用终端。
答案 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中是内置函数。上述内容应该适用于。