终端中的Python编译

1 投票
1 回答
559 浏览
提问于 2025-04-18 09:35

我明天要参加一个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 个回答

4

如果你在交互式解释器中尝试一下,就能看到发生了什么:

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

compile这个内置函数可以把源代码行编译成一个代码对象。要真正运行这个代码对象,你需要用exec来执行它:

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

需要注意的是,Python 2和Python 3之间有一些区别,主要是exec在Python 2中是一个语句,而在Python 3中是一个内置函数。上面的代码在这两种版本中都应该能正常工作。

撰写回答