2012-07-20 4 views
3

파이썬에서 argparse와 logging 모듈을 모두 사용하려고합니다. 가능한 옵션이 많은 프로그램을 실행했고 argpse 모듈을 성공적으로 구현하여이 작업을 처리했습니다.파이썬에서 argparse의 값을 기록하십시오.

프로그램을 실행하고 로그 파일로 보낼 때 각 옵션의 값을 기록하고 싶습니다. 나는 다음과 같은 것들을 시도해 보았고 나는 그 밑에 주석으로 만난 관련된 오류를 포함시켰다.

parser = argparse.ArgumentParser() 
parser.add_argument('input', action="store", default='fort.13', type=str) 

args = parser.parse_args() 

# First try: 
logging.info("Input args: " + args) 
# TypeError: cannot concatenate 'str' and 'Namespace' objects 

# Second try: 
for x in args: 
    logging.info(x) 
# TypeError: 'Namespace' object is not iterable 

이 작업을 수행하는 적절한 방법은 무엇입니까?

답변

7

당신은 당신의 구문 분석 인수의 속성을 얻을 수 vars를 사용할 수 있습니다

for arg, value in sorted(vars(args).items()): 
    logging.info("Argument %s: %r", arg, value) 

이는 the docs에 자세히 설명되어 있습니다.

+0

당신은'logging.info ("인자 % s : % r"% (n, v))'가되도록 조정할 필요가 있다고 생각합니다. 하나의 이상한 행동이지만, 내 코드에 이것을 추가하면 더 이상 .log 파일을 출력하지 않습니다. 주석을 달고 다시 실행하면 로그 파일이 남아 있습니다. 로그 파일의 작성 여부와 관련된 이상한 일을하는 이유는 무엇입니까? – JBWhitmore

+0

지금 코드를 몇 번 바꿨습니다 ... –

+0

@JBWhitmore : 로깅 모듈을 사용하면 문자열 형식을 직접 지정하지 않고 로깅 할 수 있습니다. 로그 파일에 무슨 문제가 있는지 잘 모르겠습니다 ... –

1
logging.info("Input args: %r", args) 

그냥 로그에 한 줄에 모든 인수를 포함한 전체 Namespace 개체를 덤프합니다.