终端中的Python编译

问题描述 投票:0回答:1

我明天要参加 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 上使用终端。

python compiler-errors compilation
1个回答
4
投票

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

>>> 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 中是一个内置函数。  以上应该适用于任一情况。

© www.soinside.com 2019 - 2024. All rights reserved.