终端中的Python编译
我明天要参加一个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中是一个内置函数。上面的代码在这两种版本中都应该能正常工作。