bash 변수를 Python 스크립트에 전달

bash 변수를 Python 스크립트에 전달

나는 가지고있다이 파이썬 스크립트:

#!/usr/bin/env python
def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation('abcd','')

그러나 "abcd"에 대한 변수를 사용하여 이 스크립트를 호출하여 "efgh"와 같이 "abcd" 대신 문자 조합을 삽입할 수 있기를 원합니다.

일반적으로 다음과 같이 bash 스크립트의 마지막 줄 대신 $@or를 사용할 수 있습니다 .$1abcd

#!/usr/bin/env python
def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation("$1",'')

그러나 다음과 같은 것을 사용하여 스크립트를 실행하면 다음과 같은 결과를 ./scriptname.py efgh얻습니다.

$1
1$

"efgh"에 대한 순열 대신.

답변1

쉘의 위치 매개변수 array 등에 해당하는 Python은 다음과 같습니다 $1.$2sys.argv

그래서:

#!/usr/bin/env python

import sys

def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation(sys.argv[1],'')

그 다음에

$ ./foo.py abcd
abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba

답변2

파이썬을 매개변수화하는 방법은 많습니다. 위치 인수, 환경 변수 및 명명된 인수. 환경 변수:

os를 가져오고 다음과 같이 getenv를 사용하십시오.

fw_main_width  =os.getenv('FW_MAIN_WIDTH',  fw_main_width)  

두 번째 매개변수는 env 변수가 설정되지 않은 기본값입니다.

위치 인수:

sys를 가져온 후 sys.argc, sys.argv[n]을 사용하세요.

명명된 매개변수:

또는 명명된 매개변수의 경우(귀하가 요청한 것)

 import argparse  

그런 다음 가능한 매개변수를 설명합니다.

parser = argparse.ArgumentParser(description = "Project", fromfile_prefix_chars='@')
parser.add_argument("-V", "--version", help="show program version", action="store_true")
parser.add_argument("-W", "--width", help="set main screen width")  
read arguments from the command line  

args = parser.parse_args()

args.width 등으로 사용하십시오.

답변3

좋아, 질문을 작성하는 동안 해결 방법을 찾았지만 이것이 다른 사용자에게 유용할 것이라고 생각하여 여기에 있습니다.

raw_input()Python(python2)의 경우 대신 사용할 수 있지만 $1약간 다르게 작동합니다. Bash에서 스크립트 이름 뒤에 입력을 입력하는 대신 값을 입력하라는 메시지가 표시됩니다.~ 후에스크립트를 실행합니다.

예는 다음과 같습니다.

#!/usr/bin/env python
def getPermutation(s, prefix=''):
        if len(s) == 0:
                print prefix
        for i in range(len(s)):
                getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )



getPermutation(raw_input("enter characters: "),'')

스크립트를 실행하면 사용자에게 "문자를 입력하세요:"라는 메시지가 표시됩니다. 사용자가 문자를 입력한 후 키를 누르면 ENTER순열이 터미널에 인쇄됩니다.

다음은 python3에서 이 작업을 수행하는 방법을 설명하는 소스입니다.

답변4

import itertools, argparse

def main():
        parser = argparse.ArgumentParser()
        parser.add_argument('-l', '--letters', dest='letters',  type=str, help='Letters to iterate over')
        options = parser.parse_args()


        a = [''.join(i) for i in itertools.permutations(options.letters)]
        print(a)

if __name__ == '__main__': main()

명령줄에서: FileName.py -l abcd

관련 정보