인수를 사용하여 bash에서 Python 스크립트 호출


94

다음을 사용하여 bash 스크립트에서 Python 스크립트를 실행할 수 있다는 것을 알고 있습니다.

python python_script.py

그러나 bash 스크립트에서 파이썬 스크립트에 변수 / 인수를 전달하려면 어떻게해야합니까? 어떻게 할 수 있습니까?

기본적으로 bash는 파일 이름을 알아 내고 python은 파일을 업로드하지만 이름을 호출 할 때 bash에서 python으로 파일 이름을 보내야합니다.


python python_script.py데비안의 기본 셸에서 실행할 때 이미 bash를 사용하고 있으므로 bash 스크립트에서 수행하십시오.python python_script.py arg1 arg2 ...
Oz123

@Jimmy 준비되지 않은 질문 나는 생각한다, 매우 쉽게 링크 : tutorialspoint.com/python/python_command_line_arguments.htm
Grijesh 차우

답변:


138

bash 스크립트에서 python 스크립트를 실행하려면 터미널 내에서와 동일한 명령을 호출해야합니다. 예를 들어

> python python_script.py var1 var2

파이썬 내에서 이러한 변수에 액세스하려면 다음이 필요합니다.

import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2

감사. 그러나이 방법은 단 하나의 사용 사례에 대해서만 파이썬 파일을 제한합니다. bash 스크립트 내에서 동적 매개 변수를 사용하여 Python 파일의 메소드를 호출하는 방법이 있습니까? 이런 식으로 동일한 파이썬 파일을 사용할 수 있습니다. bash 스크립트 내에서 $ var를 사용하여 Python 파일 메서드를 호출하여이 작업을 수행하려고했습니다. 그러나 어떻게 든 실패했습니다.
burcak 19

@burcak 동적 매개 변수를 기반으로 python 파일을 병렬로 실행하려면 먼저 전체 경로를 구성합니다. << python script location path >> / << python script name >> param1 param2 | << python script location path >> / << python script name >> param3 param4를 bash 스크립트에 입력 한 다음 출력을 아래 Python 스크립트에 인수로 전달합니다. import sys import subprocess arg_str = "".join (sys.argv [1 :]) cmds = arg_str. cmds의 cmd에 대한 split ( '|') : print ( 'call-'+ cmd) subprocess.Popen (cmd, shell = True) print ( 'call cmds
completed

22

사용하다

python python_script.py filename

그리고 Python 스크립트에서

import sys
print sys.argv[1]

21

옆 에 스크립트에 대한 옵션과 인수를 정의하는 데 도움이되는 argparse 모듈도 sys.argv살펴보십시오 .

argparse 모듈을 사용하면 사용자 친화적 인 명령 줄 인터페이스를 쉽게 작성할 수 있습니다.


동의합니다. argparse가 sys.argv보다 훨씬 더 나은 옵션이라는 데 동의합니다
Mo Ali

9

임베디드 옵션 :

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


1

스크립트에서 사용 :

echo $(python python_script.py arg1 arg2) > /dev/null

또는

python python_script.py "string arg"  > /dev/null

스크립트는 출력없이 실행됩니다.


"문자열 인수"를 bash에서 가져온 변수로 바꿀 수 있습니까?
CodeGuru 2016 년

1

작은 파이썬 루틴을 호출하여 메시지 창을 표시하는 bash 스크립트가 있습니다. python 스크립트를 중지하기 위해 killall을 사용해야하므로 위의 방법을 사용할 수 없습니다.

pythonprog.py "$argument"& # &는 제어권을 bash 스크립트로 직접 반환하므로 백틱 밖에 있어야합니다. 이 메시지의 미리보기는 어떤 이유로 명령의 양쪽에 "`"없이 표시됩니다.

python 스크립트가 python pythonprog.py가 아닌 이름으로 cli에서 실행되는 한 스크립트 내에서 작동합니다. 둘 이상의 인수가 필요하면 따옴표 내에서 각 인수 사이에 공백을 사용하십시오.


0

파일 이름없이 모든 인수를 인쇄합니다.

for i in range(1, len(sys.argv)):
print(sys.argv[i])

-1

getopt 모듈을 살펴보십시오 . 그것은 나를 위해 아주 잘 작동합니다!


getopt docs start : 참고 : getopt 모듈은 API가 C getopt () 함수 사용자에게 친숙하도록 설계된 명령 줄 옵션 용 파서입니다. C getopt () 함수에 익숙하지 않거나 더 적은 코드를 작성하고 더 나은 도움말 및 오류 메시지를 받고 싶은 사용자는 대신 argparse 모듈을 사용하는 것이 좋습니다.
cate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.