인수를 사용하여 bash에서 Python 스크립트를 호출합니다.
다음을 사용하여 bash 스크립트에서 python 스크립트를 실행할 수 있습니다.
python python_script.py
그러나 변수/인수를 bash 스크립트에서 python 스크립트로 전달하려면 어떻게 해야 합니까?내가 어떻게 그럴 수 있을까?
기본적으로 bash는 파일 이름을 계산하고 python은 업로드하지만 호출할 때 파일 이름을 bash에서 python으로 보내야 합니다.
bash 스크립트에서 python 스크립트를 실행하려면 단말기에서 호출하는 것과 동일한 명령을 호출해야 합니다.예를 들어.
> python python_script.py var1 var2
python 내의 이러한 변수에 액세스하려면
import sys
print(sys.argv[0]) # prints python_script.py
print(sys.argv[1]) # prints var1
print(sys.argv[2]) # prints var2
에서는 스크립트의 옵션과 인수를 정의하는 데 도움이 되는argparse 모듈도 소개합니다.
argparse 모듈을 사용하면 사용자 친화적인 명령줄 인터페이스를 쉽게 쓸 수 있습니다.
사용하다
python python_script.py filename
Python 스크립트에서
import sys
print sys.argv[1]
내장 옵션:
bash 함수로 python 코드를 랩합니다.
#!/bin/bash
function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}
# Call it
current_datetime
# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT
환경 변수를 사용하여 내장된 python 스크립트에 데이터를 전달합니다.
#!/bin/bash
function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}
# Do it one way
line 80
# Do it another way
echo $(line 80)
http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html
스크립트에서 사용:
echo $(python python_script.py arg1 arg2) > /dev/null
또는
python python_script.py "string arg" > /dev/null
스크립트는 출력 없이 실행됩니다.
메시지 창을 표시하기 위해 작은 python 루틴을 호출하는 bash 스크립트가 있습니다.python 스크립트를 중지하기 위해 killall을 사용해야 하기 때문에 위의 방법을 사용할 수 없습니다. 그러면 다른 python 프로그램을 제거할 수 있는 killall python을 실행할 수 있기 때문입니다.
pythonprog.py "$argument"
& # & returns 컨트롤은 bash 스크립트로 직접 이동하므로 백틱 외부에 있어야 합니다.이 메시지의 미리보기는 어떤 이유로 명령어 양쪽에 ""가 없는 상태로 표시됩니다.
python 스크립트가 python pythonprog.py이 아닌 CLI에서 이름으로 실행되는 한 스크립트 내에서 작동합니다.인수가 여러 개 필요한 경우 따옴표 안에 각 인수 사이에 공백을 사용하십시오.
getopt 모듈을 살펴봅니다.나한테는 꽤 효과가 있어!
파일명을 지정하지 않고 모든 arg를 인쇄합니다.
for i in range(1, len(sys.argv)):
print(sys.argv[i])
언급URL : https://stackoverflow.com/questions/14155669/call-python-script-from-bash-with-argument
'sourcetip' 카테고리의 다른 글
목록 시작 부분에 항목을 추가하려면 어떻게 해야 합니다. (0) | 2023.04.13 |
---|---|
WPF에서 그리드 제어에 경계를 설정하려면 어떻게 해야 합니까? (0) | 2023.04.13 |
EF5: 파일 '{0}'을(를) 데이터베이스 '{1}'로 첨부할 수 없습니다. (0) | 2023.04.13 |
루프를 역순으로 빠르게 반복하려면 어떻게 해야 합니까? (0) | 2023.04.13 |
프롬프트 없이 ssh-keygen을 실행하는 방법 (0) | 2023.04.13 |