我有這樣的非便攜式家當:#這裏的/ usr /斌/包膜蟒蛇-u家當便攜式
#!/usr/bin/env python -u
它是不可移植的,因爲python -u
送入作爲一個單一的對Arg的env
我的系統上。
挑戰:讓這個家當便攜式僅改變家當 - 也就是一個一個班輪。
換句話說,沒有解決方案
我有這樣的非便攜式家當:#這裏的/ usr /斌/包膜蟒蛇-u家當便攜式
#!/usr/bin/env python -u
它是不可移植的,因爲python -u
送入作爲一個單一的對Arg的env
我的系統上。
挑戰:讓這個家當便攜式僅改變家當 - 也就是一個一個班輪。
換句話說,沒有解決方案
我會使用以下方法:
#!/bin/sh
"""true"
exec python -u "$0" "[email protected]"
"""
# python code goes here
線"""true"
將由解析0作爲true
,因爲它包含一個空的""
字符串,然後是"true"
。由於true
是無操作命令,因此它將被有效忽略,並且以下行將執行Python解釋器。
另一方面,Python將以非常不同的方式解析"""true"
行,因爲triple-quoted string的開頭以true"
開頭,並在下面兩行關閉。由於該字符串不用於任何事情,Python解釋器將有效地忽略啓動Python的shell代碼片段。這是"""xxx"
的解釋不同,它允許Python和sh
代碼共存於同一個腳本中。
對於一個簡單的測試,追加類似:
import sys
print "hello!", sys.argv
給予合理sh
實現(考慮到時間啓動Python)的,這不應該是可測量比使用env
慢。
我問了一個只涉及shebang線的解決方案,而不是多線解決方案。 – dnozay