【发布时间】:2011-04-20 19:29:55
【问题描述】:
由于某种原因,-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'
在 RHE 系统上执行相同的脚本会导致:
/usr/bin/env: python -O: 没有这个文件 或目录
没有-O标志,脚本在RHE系统上正常执行(即,__debug__内置变量将设置为True)。
是否有解决此问题的跨平台方法?是否有特定于平台的方法来解决 shebang 行上的标志问题到 python 解释器?
编辑:在解释器范围内设置 __debug__ 变量(不使用 shebang 标志)的任何其他解决方法也很有趣。
【问题讨论】:
-
我依稀记得一个说法,你不能指望能够在shebang中传递多个参数,而
python就是/usr/bin/env python中的那个参数... -
@delnan 这也是我的恐惧。我希望可能有一些巧妙的方法来引用
python以及可以使用的标志,但我没有找到任何东西。 -
@uku 因为在某些系统上,我不希望默认python的系统版本(通常版本$PATH设置选择默认的python解释器(例如,可能在其主目录中的解释器)。
-
@Uku Loskit:使用
/usr/bin/env python可以让你的脚本在不同地方安装了python的不同机器上运行。 -
@Uku:因此,每当 python 解释器的位置发生变化时(或者 - 对于广泛分布的东西非常重要 - 当您将它安装在放置其他地方的解释器),或者您将不同的解释器提升为默认版本(使用
python3时更可能的情况)。