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

awe*_*omo 8 python shell shebang

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

在OS X上执行下面的脚本工作正常.-O可以验证对标志的识别,因为它可以启用(当不存在时)或禁用(在给定时)if __debug__条件下的任何内容:

#!/usr/bin/env python -O                                                                                                                                                                       

if __name__ == '__main__':

    if __debug__:
        print 'lots of debugging output on'

    print 'Fin'
Run Code Online (Sandbox Code Playgroud)

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

/ usr/bin/env:python -O:没有这样的文件或目录

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

有没有跨平台的方法来解决这个问题?是否有一种特定于平台的方法来解决shebang线上的标志问题给python解释器?

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

Ran*_*832 5

某些系统不允许在#!-style 行上出现多个参数。在任何情况下,“env hack”都不是解决路径问题的官方推荐方法 - 处理此问题的首选方法是让安装重写该行#!以引用/bin/python, /usr/bin/python, 根据系统情况而定。

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


unu*_*tbu 4

制作一个小的 shell 脚本怎么样:

\n\n

蟒蛇

\n\n
#!/bin/sh    \n/usr/bin/env python -O "$@"\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后更改您的脚本以使用:

\n\n
#!pythono       \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
   PYTHONOPTIMIZE\n          If this is set to a non-empty string it is equivalent to  specifying  the\n          -O option. If set to an integer, it is equivalent to specifying -O multi\xe2\x80\x90\n          ple times.\n
Run Code Online (Sandbox Code Playgroud)\n

  • 呃,如果你能做到这一点,你就不需要`env`,你可以只需要`python -O "$@"`。 (2认同)