엄범


argparse (docs)

원래 파이썬에서 프로그램 실행 시 인자( e.g., ``c main(int argc, char *argv[])`` )를 받기 위해서는 sys모듈의 

``python sys.argv``를 이용해야 한다.

```python

args = sys.argv[1:]

```


이를 대체하는 argv 파싱 라이브러리로 `` argparse``를 사용하면 더 편하다.
(optparse는 업데이트가 중단되어 argparse에 포함 되었다.)

``python sys.argv`` 사용할 필요 없이 ``python argparser.parse_args()`` 하는 순간 알아서 argument를 가져온다.
```python
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`` 객체를 출력해 보면 이렇다. 

```python

Namespace(h2md=False, m=True, url='asdf')

```

``python action='store_const'``를 지정해 숫자 값을 갖도록 할 수 있다.


```py

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를 명시해도되고 안해도 되도록 만들고 싶은 경우

```python
parser.add_argument("addr", type=str, nargs="?", help="RAPT Server address e.g., 192.168.0.1:31234")
```


python-fire