본문 바로가기
파이썬

파이썬 Python에서 전체 목록을 명령 줄 인수로 전달하는 방법은 무엇입니까?

by º기록 2020. 11. 18.
반응형

정수를 포함하는 두 개의 목록을 파이썬 코드에 인수로 전달하려고했습니다. 그러나 sys.argv [i] 는 매개 변수를 문자열 목록으로 가져옵니다.

입력은 다음과 같습니다.

$ python filename.py [2,3,4,5] [1,2,3,4]

목록을 변환하기 위해 다음 해킹을 발견했습니다.

strA = sys.argv[1].replace('[', ' ').replace(']', ' ').replace(',', ' ').split()
strB = sys.argv[2].replace('[', ' ').replace(']', ' ').replace(',', ' ').split()
A = [float(i) for i in strA]
B = [float (i) for i in strB]

이 작업을 수행하는 더 좋은 방법이 있습니까?

 

해결 방법

 

명령 줄 인수는 항상 문자열로 전달됩니다. 필요한 데이터 유형으로 직접 구문 분석해야합니다.

>>> input = "[2,3,4,5]"
>>> map(float, input.strip('[]').split(','))
[2.0, 3.0, 4.0, 5.0]
>>> A = map(float, input.strip('[]').split(','))
>>> print(A, type(A))
([2.0, 3.0, 4.0, 5.0], <type 'list'>)


2019 년 1 월 편집 이 답변은 여전히 ​​약간의 조치를 취하는 것 같으므로 argparse 문서에서 직접 가져온 다른 옵션을 추가하겠습니다.

action = append 를 사용하여 반복되는 인수를 단일 목록으로 수집 할 수 있습니다.

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='append')
>>> parser.parse_args('--foo 1 --foo 2'.split())
Namespace(foo=['1', '2'])

이 경우 각 목록 항목에 대해 한 번씩 -foo? 를 전달합니다. OP 예제 사용 : python filename.py --foo 2 --foo 3 --foo 4 --foo 5 foo = [2,3,4,5]

 

참조 페이지 https://stackoverflow.com/questions/32761999

 

 

반응형

댓글