Python Argparse : 기본값 또는 지정된 값


174

플래그가 지정된 값이없는 경우 기본값으로 값을 지정하는 선택적 인수를 갖고 싶지만 사용자가 값을 지정하면 기본값 대신 사용자 지정 값을 저장하고 싶습니다. 이에 대한 조치가 이미 있습니까?

예를 들면 :

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

액션을 만들 수는 있지만 기존 방법이 있는지 확인하고 싶었습니다.

답변:


273
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?' 0 또는 1 인수를 의미
  • const=1 인수가 0 인 경우 기본값을 설정합니다.
  • type=int 인수를 int로 변환

당신이 원하는 경우 test.py설정할 수 example없음이 경우에도 1로 --example지정하면 포함 default=1. 즉,

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

그때

% test.py 
Namespace(example=1)

문자열 로이 작업을 수행하는 방법은 무엇입니까? ""(기본값은 빈 문자열)과 ""(사용자가 입력 한 빈 문자열)을 구분하는 딜레마가 있습니다. 지금은 코드에서 기본값을 사용하고 있으며 일부 작업을 수행해야하므로 다음과 같은 내용이 self.foo = (args.bar or some_else_source).upper()있습니다. None 개체 AFAIUC에서 중단됩니다.
0andriy

16

실제로이 스크립트 에서와 같이 default인수 만 사용하면 됩니다.add_argumenttest.py

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)

test.py --example
% 1
test.py --example 2
% 2

자세한 내용은 여기에 있습니다 .


7

차이점 :

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

따라서 :

myscript.py => 디버그는 첫 번째 경우 7 (기본값)이고 두 번째 경우 "없음"입니다.

myscript.py --debug => 디버그는 각각 1입니다

myscript.py --debug 2 => 디버그는 각 경우에 2

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.