인수를 입력으로 받아들이는 Python 함수가 있고 이를 자동화하고 bash를 통해 호출하고 싶습니다. 하지만 호출하는 동안 변수(문자열)를 전달하면 bash에서 오류가 발생합니다.
a="test"
python -c "from pipeline_runs.z_full_pipeline import test; test($a)"
실패한
NameError: name 'test' is not defined
그러나 변수가 int이면 효과는 동일합니다.
a="10"
python -c "from pipeline_runs.z_full_pipeline import test; test($a)"
첫 번째 코드가 실패하면 실행됩니다. 이 동작이 발생하는 이유와 bash 스크립트에서 Python 함수로 문자열을 전달할 수 있도록 무엇을 변경해야 하는지 설명할 수 있는 사람이 있나요?
답변1
대신 쉘 함수로 만드십시오. 이것을 터미널에 붙여넣거나 쉘의 구성 파일( ~/.bashrc
예: bash의 경우) 에 추가하세요.
pipeline_test(){
python -c 'from sys import argv; from pipeline_runs.z_full_pipeline import test; test(argv[1])' "$@"
}
그런 다음 다음과 같이 실행하십시오.
pipeline_test "$a"
답변2
당신은 시도:
export a="test"
python -c "from pipeline_runs.z_full_pipeline import test; test('$a')"
이 경우 명령은 다음으로 확장됩니다.from pipeline_runs.z_full_pipeline import test; test('test')
'test'
대신에 전자 test
는 문자열이고 후자는 정의되지 않은 변수입니다.
하지만 안전한 방법은 os.environ
사전을 사용하는 것입니다. 그런 다음 스크립트를 example.py 파일에 넣으세요. 그리고 시작하세요:
import os
a = os.environ['a']
test(a)
이 방법은 확장성이 더 뛰어나며 문자열을 확장할 필요가 없습니다.
셸에서 a="test"
및는 a=test
동의어입니다.