或者,假设您正确地将文件设置为可执行文件,为什么这不起作用? (在我的系统上,它只是挂起,但是可以用^ C杀死。)
#!/usr/bin/env TEST=TEST python
print('hello')
虽然这样做:
#!/usr/bin/env python
print('hello')
这样做:
[fred@pc build]$ /usr/bin/env TEST=TEST python hello.py
hello
答案 0 :(得分:3)
由于版本8.30 env具有选项-S,因此可以使事情变 在linux中也可以工作:
使用
#!/usr/bin/env -S TEST=TEST python
答案 1 :(得分:0)
在某些系统(包括Linux)上,
#!/usr/bin/env TEST=TEST python
如果您使用“ ./hello.py”运行,则“ hello.py”中的行与运行相同
/usr/bin/env 'TEST=TEST python' ./hello.py
请注意,“ TEST = TEST python”只是一个参数。这导致'env'将TEST
环境变量设置为'TEST python'
,然后使用exec运行./hello.py
。然后再次处理shebang行,然后递归重复该过程。总体效果是一遍又一遍地执行env
,直到该过程被中断为止。如果在执行过程中在系统上运行top
,将会看到非常繁忙的过程。
有关#!
机制如何工作的信息,请参见Shebang (Unix)维基百科文章。它包含一些细节的差异,这些差异在不同系统上的处理方式不同。
在Linux和许多其他系统上,无法在shebang行上设置环境变量。您需要在程序本身中设置它们,或者,如果不合适,请使用包装程序(例如琐碎的Shell程序)运行Python程序。