我有一个测试脚本,例如“test.py”,我想让它,使之与设置脚本开始前一个特定的环境变量执行:
#!/usr/bin/env TEST=anything python
print "Hello, world."
运行此通常按预期工作:
$ python test.py
Hello, world.
但是,如果我运行它的程序:
$ chmod +x test.py
$ ./test.py
该字符串从不打印,而不是执行刚刚档和“顶”报道了一个名为“test.py”这是使用100%的CPU处理。
这只是发生我的Ubuntu的机器上,似乎是在OS X罚款
原因是,最终我想在32位的Python通过设置始终运行特定的脚本:
#!/usr/bin/env VERSIONER_PYTHON_PREFER_32_BIT=yes python
在文件的顶部。 然而,这是否意味着该脚本将不会在Linux机器上执行不走。 我发现有一个类似的效果无论什么指定的环境变量被调用。 然而,如果没有环境变量设置:
#!/usr/bin/env python
print "Hello, world."
该脚本运行良好:
$ ./test.py
Hello, world.
这是在Python或错误env
,还是我做错了什么?
在Linux上,
#!/usr/bin/env TEST=anything python
通过TEST=anything python
作为一个参数传递给env
。 所以env
将无法正确处理参数。
底线是,你只能把一个命令后env
上的shebang行,一切都将在最被忽略。
从上家当维基百科条目 :
另一个可移植性问题的命令参数的解释。 一些系统,包括Linux, 不分裂的观点[24] ; 例如,与第一线运行脚本时一样,
#!的/ usr /斌/包膜蟒蛇-c
也就是说,蟒蛇-c会一个参数为/ usr / bin中/ env的,而不是两个参数传递。 Cygwin的表现也这样。
我怀疑/usr/bin/env VERSIONER_PYTHON_PREFER_32_BIT=yes python
是要正常运行。
相反,尝试与Python设置环境变量:
import os
os.environ['VERSIONER_PYTHON_PREFER_32_BIT'] = 'yes'
你可能需要忘掉VERSIONER_PYTHON_PREFER_32_BIT,至少在Linux上。 在Mac上,你可以使用一个shell包装它。
然后在Linux上,你可能需要使用一个小的存根python脚本或bash脚本或东西来重塑VERSIONER_PYTHON_PREFER_32_BIT,铰链上类似如下:
>>> import platform
>>> platform.machine()
'x86_64'
>>> platform.processor()
'x86_64'
文章来源: why does setting an initial environment using env stall the launch of my Python script on Ubuntu?