Bash에서 Python 함수로 문자열을 전달하는 방법

Bash에서 Python 함수로 문자열을 전달하는 방법

인수를 입력으로 받아들이는 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동의어입니다.

관련 정보