2012-09-07 2 views
2

내 스크립트는 현재 sys.argv을 사용하여 프로그램에 제공된 입력 파일을 확인합니다.sys.argv와 반대로 'argparse'사용

대신 argparse을 사용하려하지만 작동하지 않는 것 같습니다. 나는 그것을 설정하고 인수를 추가 할 수 있었지만 인수를 구문 분석하고 그 인수를 인쇄하면 네임 스페이스가 생깁니다. 어떻게 문자열을 얻을 수 있습니까? 기본적으로 인수를 문자열로 사용하고 해당 이름의 파일을 열고 싶습니다.

현재 내 sys.argv은 다음과 같습니다

filename = sys.argv[1] 
f = open(filename, 'r') 

argparse 인쇄 밖으로 Namespace 다음과 같이

arg = parser.parse_args() 
print arg 

가 어떻게 파일을 열 것을 사용할 수 있습니까? 인수에 대한 오류 handlign이 훨씬 쉽기 때문에 argparse을 사용하고 싶습니다.

답변

4

가 바람직 생각하는 유형의 parser.fflag에 의해 액세스 할 수 있습니다 (또는 뭔가를!) with 문을 사용하여 다음과 같이 파일을 엽니 다.

# printfile.py 
import argparse 

parser = argparse.ArgumentParser(description="Opens a file and does cool stuff ^^") 
parser.add_argument('filename', type=str, help="Path to file to open") 
args = parser.parse_args() 

with open(args.filename) as f: 
    print ' my uber cool file:' 
    print f.readlines() 

키워드 args를 지정합니다. 예쁜 도움말 텍스트 옵션을 만드는데도 도움이됩니다. (깔끔하고 청초 함)

[[email protected]:~] $ python printfile.py -h 
usage: printfile.py [-h] filename 

Opens a file and does cool stuff ^^ 

positional arguments: 
    filename Path to file to open 
+0

실제로 오류 처리와 함께 내 문제를 해결했습니다 ('with' 문으로). 감사! – darksky

+1

'with'는 컨텍스트 관리자입니다. 예외를 포함하여 컨텍스트를 종료 할 때 컨텍스트를 만드는 데 사용 된 개체가 제대로 마무리 될 것임을 보장합니다 (인터프리터 내에서 세그먼트 오류를 ​​막음). 즉, 파일이 올바르게 닫히고 이러한 리소스는 아무리 발생해도 해제됩니다. – mgilson

2

인쇄 argargparse 설정에서 인수에 할당 한 이름 뒤에 점이옵니다.

:이 경우

parser = argparse.ArgumentParser(description = 'Title you want') 
parser.add_argument('-f', action = "store", dest = "fflag", type = str, help = "Filename to be used, stdin is default") 

는, 파일 이름은 명령 행에 -f 앞에되며 str

+0

그래서 argparse는 기본적으로 모든 인수를 사전에 넣습니다. 또한 파일을 출력하면'에 'r'모드가 반환됩니다. 그 파일이 이미 argparse에 의해 열렸 음을 의미합니까? – darksky

+0

@Darksky - 실제로는 사용자 지정 개체이고 일반 dict가 아닙니다. arg를 파일로 입력하면 이미 열려있는 파일 객체를 편리하게 얻을 수 있습니다. 당신은 str을 is로 입력하고 원한다면 파일 유효성 검사없이 문자열을 돌려받을 수 있습니다. – jdi

+0

http://www.doughellmann.com/PyMOTW/argparse/ 내가 찾은 좋은 자습서였습니다. 나중에 프로그램에 액세스 할 수있게하려면 기본적으로 인수를 설정하고 변수에 할당하십시오. 내 대답을 예제로 업데이트하겠습니다. – squiguy