如何修复某些系统上无法识别的shebang标志

2024-06-24 12:12:07 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些原因,-O(优化)标志在我访问的Red Hat Enterprise Server(5.3版)的shebang行中无法识别。在其他系统上,可以毫无问题地识别标志。在

在OSX上执行下面的脚本很好。可以验证对-O标志的识别,因为它在if __debug__条件下启用(如果不存在)或禁用(如果给定)任何内容:

#!/usr/bin/env python -O                                                                                                                                                                       

if __name__ == '__main__':

    if __debug__:
        print 'lots of debugging output on'

    print 'Fin'

在RHE系统上执行相同的脚本会导致:

/usr/bin/env: python -O: No such file or directory

没有-O标志,脚本在RHE系统上正常执行(即,__debug__内置变量将设置为True)。在

有没有跨平台的方法来解决这个问题?有没有一种特定于平台的方法可以将shebang行上的标志问题修复到python解释器?在

编辑:在解释器范围内设置__debug__变量(不使用shebang标志)的任何其他解决方法也很有趣。在


Tags: 方法debugenv脚本ifbin标志usr
3条回答

有些系统不允许#!样式行上有多个参数。在任何情况下,“env hack”都不是官方推荐的解决路径问题的方法——处理这个问题的首选方法是让install重写#!行,以引用/bin/python/usr/bin/python,这是适合系统的。在

http://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html

制作一个小的shell脚本如何:

Python

#!/bin/sh    
/usr/bin/env python -O "$@"

然后更改脚本以使用:

^{pr2}$

还要注意,将环境变量PYTHONOPTIMIZE设置为非空字符串与使用-O标志相同。从man python手册页:

   PYTHONOPTIMIZE
          If this is set to a non-empty string it is equivalent to  specifying  the
          -O option. If set to an integer, it is equivalent to specifying -O multi‐
          ple times.

要稍微扩展unutbu所说的内容,可以选择在运行时初始化PYTHONOPTIMIZE。这适用于所有现代贝壳:

% PYTHONOPTIMIZE=1 foo.py
Fin

为了完整起见:

^{pr2}$

相关问题 更多 >