특정 Python 설치로 실행해야하는 Python 스크립트가 있습니다. 함께 실행되도록 shebang을 만드는 방법이 $FOO/bar/MyCustomPython
있습니까?
shebang 라인은 매우 제한적입니다. 많은 유닉스 변형 (Linux 포함)에서는 명령과 단일 인수라는 두 단어 만 사용할 수 있습니다. 또한 종종 길이 제한이 있습니다.
일반적인 해결책은 작은 셸 래퍼를 작성하는 것입니다. Python 스크립트의 이름을 지정하고 foo.py
옆에 쉘 스크립트를 놓고 foo.py
호출합니다 foo
. 이 접근 방식은 Python 스크립트에 특정 헤더가 필요하지 않습니다.
#!/bin/sh
exec "$FOO/bar/MyCustomPython" "$0.py" "$@"
또 다른 유혹적인 접근 방식은 위와 같은 래퍼 스크립트를 작성 #!/path/to/wrapper/script
하고 Python 스크립트에 shebang 줄로 추가하는 것입니다. 그러나 대부분의 유니스는 shebang 스크립트 연결을 지원하지 않으므로 작동하지 않습니다.
경우 MyCustomPython
에 있었다 $PATH
, 당신은 사용할 수 env
를 찾기 위해 :
#!/usr/bin/env MyCustomPython
import …
또 다른 접근 방식은 스크립트가 유효한 셸 스크립트 (올바른 Python 인터프리터를 자체로드)와 대상 언어 (여기서는 Python)의 유효한 스크립트가되도록 배열하는 것입니다. 이를 위해서는 대상 언어에 대해 이러한 이중 언어 스크립트를 작성하는 방법을 찾아야합니다. Perl에서 이것은 if $running_under_some_shell
.
#!/bin/sh
eval 'exec "$FOO/bar/MyCustomPerl" -wS $0 ${1+"$@"}'
if $running_under_some_shell;
use …
다음은 Python에서 동일한 효과를 얻는 한 가지 방법입니다. 셸 "true"
에서 true
유틸리티는 인수 (두 개의 단일 문자 문자열 :
및 '
) 를 무시하고 참 값을 반환합니다. Python "true"
에서은 부울로 해석 될 때 참인 문자열이므로 if
항상 참이고 문자열 리터럴을 실행 하는 명령어입니다.
#!/bin/sh
if "true" : '''\'
then
exec "$FOO/bar/MyCustomPython" "$0" "$@"
exit 127
fi
'''
import …
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다