(python) argparse, python-fire
argparse(docs)
원래 파이썬에서 프로그램 실행 시 인자( e.g., main(int argc, char \*argv[])
)를 받기 위해서는 sys모듈의 sys.argv
를 이용해야 한다.
1
2
args = sys.argv[1:]
이를 대체하는 argv 파싱 라이브러리로 argparse
를 사용하면 더 편하다. (optparse는 업데이트가 중단되어 argparse에 포함 되었다.) sys.argv
사용할 필요 없이 python argparser.parse\_args()
하는 순간 알아서 argument를 가져온다.
1
2
3
4
5
6
7
8
argparser = argparse.ArgumentParser(description='tistory downloader')
argparser.add\_argument('-nomedia', action='store\_true', help="...")
argparser.add\_argument('-md', action='store\_true', help="...")
argparser.add\_argument('--src', default="./{postname}\_files/", help="...")
argparser.add\_argument('-b', action='store\_true', help="...")
argparser.add\_argument('url', type=str, help='...')
argv = argparser.parse\_args()
argv
객체를 출력해 보면 이렇다.
1
2
Namespace(h2md=False, m=True, url='asdf')
action='store\_const'
를 지정해 숫자 값을 갖도록 할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def parseArgs():
parser = argparse.ArgumentParser(description="SIEM Mimikatz detect python application.")
parser.add\_argument("arg", metavar="<type>:<\*.dll>:<\*.dll>:<...>", type=str, nargs='+', help="e.g., Rule:ntdll.dll:cryptsp.dll")
return parser.parse\_args()
if \_\_name\_\_ == "\_\_main\_\_":
dll\_list = parseArgs()
print(dll\_list)
>>> Namespace(arg=['Rule:cryptsp.dll'])
>>> python .\query.py -h
>>> positional arguments:
>>> <type>:<\*.dll>:<\*.dll>:<...> e.g., Rule:ntdll.dll:cryptsp.dll
positional argument를 명시해도되고 안해도 되도록 만들고 싶은 경우
1
2
parser.add\_argument("addr", type=str, nargs="?", help="RAPT Server address e.g., 192.168.0.1:31234")
python-fire
This post is licensed under CC BY 4.0 by the author.