![](/img/trans.png)
[英]Airflow does not launch my dags (activate a python environment and launch a python script)
[英]why does setting an initial environment using env stall the launch of my Python script on Ubuntu?
我有一个测试脚本,例如“ 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
将无法正确处理该参数。
最重要的是,您只能在enbang之后的env
后面放置一个命令,其他所有内容最多将被忽略。
另一个可移植性问题是命令参数的解释。 某些系统,包括Linux, 没有将参数分开[24] ; 例如,使用第一行运行脚本时,
#!/ usr / bin / env python -c
也就是说,python -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'
至少在Linux上,您可能需要忘记VERSIONER_PYTHON_PREFER_32_BIT。 在Mac上,您可以使用外壳包装。
然后在Linux上,您可能需要使用较小的stub python脚本或bash脚本或类似内容重新发明VERSIONER_PYTHON_PREFER_32_BIT,如下所示:
>>> import platform
>>> platform.machine()
'x86_64'
>>> platform.processor()
'x86_64'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.