为什么设置使用ENV搪塞推出Ubuntu上我的Python脚本的初始环境?(why does set

2019-09-16 14:36发布

我有一个测试脚本,例如“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 ,还是我做错了什么?

Answer 1:

在Linux上,

#!/usr/bin/env TEST=anything python

通过TEST=anything python作为一个参数传递给env 。 所以env将无法正确处理参数。

底线是,你只能把一个命令后env上的shebang行,一切都将在最被忽略。

从上家当维基百科条目 :

另一个可移植性问题的命令参数的解释。 一些系统,包括Linux, 不分裂的观点[24] ; 例如,与第一线运行脚本时一样,

#!的/ usr /斌/包膜蟒蛇-c

也就是说,蟒蛇-c会一个参数为/ usr / bin中/ env的,而不是两个参数传递。 Cygwin的表现也这样。



Answer 2:

我怀疑/usr/bin/env VERSIONER_PYTHON_PREFER_32_BIT=yes python是要正常运行。

相反,尝试与Python设置环境变量:

import os

os.environ['VERSIONER_PYTHON_PREFER_32_BIT'] = 'yes'


Answer 3:

你可能需要忘掉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?
标签: python shell env