2017-11-24 8 views
0

저는 파이썬에서 많은 경험이 없으므로 항상 Google Python Style Guide을 따르려고합니다. 이 안내서에는 다음 문장이 들어 있습니다.파이썬에서 인수를 구문 분석하는 가장 좋은 방법은 무엇입니까?

"스크립트로 사용되는 파일조차도 가져올 수 있어야하며 단순한 가져 오기는 스크립트의 주요 기능을 실행하는 부작용이 없어야합니다."

따라서 __getattr__을 재정의하는 방법을 검색했으며 다음과 같이 인수 구문 분석에 this ArrtDict class을 사용했습니다.

import argparse 

class AttrDict(dict): 
    def __init__(self, *args, **kwargs): 
     super(AttrDict, self).__init__(*args, **kwargs) 
     self.__dict__ = self 

def parse_args(args): 
    if isinstance(args, list): 
     parser = argparse.ArgumentParser() 
     parser.add_argument('--args1') 
     return parser.parse_args(args) 
    else: 
     return AttrDict(args) 

def main(args): 
    args = parse_args(args) 

if __name__ == '__main__': 
    import sys 
    main(sys.argv[1:]) 

파이썬에서 인수 구문 분석을 수행하는 가장 좋은 방법은 무엇입니까?

if __name__ == '__main__': 

그리고 스크립트를 실행하는 모든 코드가 그 블록에 나타나도록 :

+0

오버라이드 (override) 할 필요가 없습니다

Python argparse library

: 여기에 문서에 대한 링크입니다. –

+0

@EdwardMoseley 좋아, 빨리 옮길 것이지만 40 분에 한 번만 게시 할 수 있기 때문에 지금 당장은 할 수 없습니다. – Han

+0

'argparse.Namespace'는'AttrDict'처럼 행동하는 클래스입니다. 'parse_args'는 그러한 객체를 반환하지만, 당신 자신을 만들 수 있습니다. 'args = argparse.Namespace (foo ='bar ', verbose = True)'. – hpaulj

답변

1

당신이 말하고있는 참조하고있는 문장은 스크립트 파일에이 줄을 가져야한다는 것입니다. 이렇게하면 가져 오기가 위에서 언급 한 if 문을 무시하기 때문에 다른 파일에서 코드를 가져올 때 코드가 자동으로 실행되지 않도록 할 수 있습니다.

인수를 처리 할 때 (위에서 언급 한 if 블록에 있어야합니다. 가져올 때이를 원하지 않으므로) Python 2.7 이후의 모든 것에 대해 argparse를 사용해야합니다. 당신은 당신이 제공 한 코드에서 어떤 버그가없는 경우이 아마 코드 리뷰 더 적합한 __getattr__

+0

나는 impoting module에서 main method를 호출하는 것에 너무 집착했다고 생각한다. 귀하의 조언에 감사드립니다. – Han