我有一个测试脚本,例如“test.py”,我想让它在脚本开始之前使用特定的环境变量集执行:

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

print "Hello, world."

运行此命令通常按预期工作:
$ python test.py
Hello, world.

但是,如果我将其作为程序运行:
$ chmod +x test.py
$ ./test.py

字符串永远不会被打印,相反,执行只是暂停,“top”报告一个名为“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无法正确处理参数。
归根结底,您只能在shebang行的env之后放置一个命令,其他命令最多都将被忽略。
Wikipedia entry on Shebang开始:
另一个可移植性问题是命令的解释
论据。一些系统,包括Linux,do not split up the arguments[24];例如,当使用第一个
像线一样,
#!/usr/bin/env python-c
也就是说,python-c将作为一个参数传递给/usr/bin/env,
而不是两个论点。Cygwin也有这种行为。

关于python - 为什么使用env设置初始环境会阻止我的Python脚本在Ubuntu上的启动?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10217199/

10-11 22:54
查看更多