2016-09-28 1 views
0

나는 사용자가 argparse에 대한 인수로 단일 문자열 또는 각 행에 문자열이있는 파일 이름을 제공 할 수있는 사용 사례가 있습니다.argparse : 단일 문자열 인수를 구문 분석하는 방법 또는 여러 인수를 나열하는 파일을 분석하는 방법?

스크립트는 문자열는 foobar가 읽을 수있는 파일인지 여부를 결정

는 사용자가 ./myscript.py -i foobar

내가 찾고 논리적 흐름이 같은 것입니다 시작 가정합니다. 실제로 읽을 수있는 파일 인 경우 스크립트의 일부 함수를 호출하여 foobar에있는 각 행을 해당 함수의 인수로 전달합니다. foobar가 읽을 수있는 파일이 아니라면 같은 함수를 호출하지만 문자열로 foobar을 인자로 사용하고 반환하면됩니다.

파일 이름 인수에 특정 확장자 (또는 확장자)가 있음을 보장 할 능력이 없습니다.

위에서 설명한 것처럼 논리를 정확히 코딩하는 것 외에 다른 방법을 사용할 수 있습니까? argparse tutorial을 살펴 보았지만 아무 것도 보지 못했습니다.하지만 파일 이름에 대한 특정 후크가있을 것이라고 생각하는 것이 합리적입니다. 그래서 물어 보았습니다.

+0

[os.path.exists]에서보세요 (https://docs.python.org/2/library/os.path.html#os.path.exists) – FamousJameous

답변

1

수있는 방법이 될 것이다 :

이의는이 같은 파서를 만들었다 고 가정 해 봅시다 :

parser.add_argument('-i', 
        help='...', 
        type=function) 

경우 사용자의 입력을 평가하는 외부 함수가 될 것이다 functiontypestring 또는 filename

type에 대한 자세한 내용은 documentation에서 확인할 수 있습니다.

parser.add_argument('-d','--directory', 
        type=Val_dir, 
        help='...') 
# .... 

def Val_dir(dir): 
    if not os.path.isdir(dir): 
     raise argparse.ArgumentTypeError('The directory you specified does not seem to exist!') 
    else: 
     return dir 

위의 예와 type 우리 시간을 분석에 입력을 제어 할 수 있음을 도시한다 : 여기

type의 사용을 보여 최소한의 예이다. 물론 함수가 다른 논리를 구현할 수도 있습니다 - 입력이 문자열인지 또는 파일 이름인지 평가하십시오.

0

argparse 문제는 원하지 않는 내용이므로 모두 문자열로 보입니다. 이 문자열은 파일 이름 또는 함수 인수가 될 수 있습니다. parser에 이것들은 똑같이 보일 것이다. 또한 argparse은 일반적으로 기능을 실행하는 데 사용되지 않습니다. 명령 줄을 구문 분석하는 데 사용됩니다. 코드가 해당 정보로 수행 할 작업을 결정합니다.

import argparse 
def somefunction(*args): 
    print(args) 

if __name__=='__main__': 
    parser=argparse.ArgumentParser() 
    parser.add_argument('-i','--input') 
    args = parser.parse_args() 

    try: 
     with open(args.input) as f: 
      lines = f.read() 
      somefunction(*lines) 
      # or 
      # for line in lines: 
      # somefuncion(line.strip()) 
    except: 
     somefunction(arg.input) 

argparse 단지 args.input 문자열을 제공

그래서 여기에 내가 당신의 작업을 수행 생각 스크립트 (안된)입니다. 사용 방법을 결정하는 try/except 블록입니다.

이이 같은 파일로 작업하도록되어

parser=argparse.ArgumentParser(fromfile_prefix_chars='@', 
    description="use <prog -i @filename> to load values from file") 
parser.add_argument('-i','--inputs') 
args=parser.parse_args() 
for arg in args.inputs: 
    somefunction(arg) 

: 여기 ================

는 접두사 문자의 접근 방식

one 
two 
three 

https://docs.python.org/3/library/argparse.html#fromfile-prefix-chars

관련 문제