*.pyc 文件如何执行?

6 linux python command-line ubuntu

我注意到导入一个可执行的 Python 文件会保存一个 *.py[co] 文件,正如预期的那样,但该文件也被标记为可执行文件。随机,我想我是否可以直接执行这个文件,并且它起作用了!

复制步骤:

$ echo 'print "Worked."' > testcase.py
$ chmod u+x testcase.py
$ python -c 'import testcase'
Worked.
$ ./testcase.pyc
Worked.
Run Code Online (Sandbox Code Playgroud)

这是如何工作的?为什么我没有收到错误消息?我的系统 Ubuntu 9.04 是否在做一些特别的事情,还是我忘记了 Linux 的一般工作方式?

$ python --version
Python 2.6.2
$ hd testcase.pyc
00000000  d1 f2 0d 0a a4 4f 08 4b  63 00 00 00 00 00 00 00  |.....O.Kc.......|
00000010  00 01 00 00 00 40 00 00  00 73 09 00 00 00 64 00  |.....@...s....d.|
00000020  00 47 48 64 01 00 53 28  02 00 00 00 73 07 00 00  |.GHd..S(....s...|
00000030  00 57 6f 72 6b 65 64 2e  4e 28 00 00 00 00 28 00  |.Worked.N(....(.|
00000040  00 00 00 28 00 00 00 00  28 00 00 00 00 73 0b 00  |...(....(....s..|
00000050  00 00 74 65 73 74 63 61  73 65 2e 70 79 74 08 00  |..testcase.pyt..|
00000060  00 00 3c 6d 6f 64 75 6c  65 3e 01 00 00 00 73 00  |..<module>....s.|
00000070  00 00 00                                          |...|
00000073
Run Code Online (Sandbox Code Playgroud)

(包括 hexdump 以显示没有 shebang 行,并阅读有关 .pyc 格式的内容,这里没有任何内容不是针对 Python 的。)

Chr*_*sen 9

也许您的系统有一个binfmt_misc.pyc文件条目。寻找/proc/sys/fs/binfmt_misc入口。