이 argparse 고정 문제를 해결하는 방법은 무엇입니까?

회전 초

파일과 디렉토리를 사용하는 매우 간단한 터미널 메뉴를 만들고 싶으므로 다음을 시도했습니다.

if __name__ == '__main__':

    p = argparse.ArgumentParser(NAME)

    p.add_argument('-data:', '--input_data', default=sys.stdin)
    p.add_argument('-labels:', '--targets', default=sys.stdin)
    p.add_argument('-input_directory:', '--input', default=sys.stdin)
    p.add_argument('-output_data:', '--output', default=sys.stdout)
    opts = p.parse_args()

    if not any([opts.input, opts.output, opts.targets,opts.input_data]):
        p.print_usage()
        quit()
        print '\npress -h to see the help\n'

    elif any([opts.targets,opts.input_data]):
        print '\ncompleted action\n'

        p.print_usage()
        #Recibe (datos, etiquetas)
        perform_stuff(opts.input_data, opts.targets)
        quit()

#Here is the problem:

    elif any([opts.input, opts.output]):
        print '\ncompleted action\n'
        retrive(opts.input)
        write(opts.output)

단순화를 위해 perform_stuff(path/in/file, path/out/file), retrive(opts.input)write(opts.output)구현을 생략했습니다 . 문제는 작동하는 유일한 명령은 다음과 같다는 것입니다.

    if not any([opts.input, opts.output, opts.targets,opts.input_data]):
        p.print_usage()
        quit()
        print '\npress -h to see the help\n'

    elif any([opts.targets,opts.input_data]):
        print '\ncompleted action\n'

        p.print_usage()
        #Recibe (datos, etiquetas)
        perform_stuff(opts.input_data, opts.targets)
        quit()

반면에 실행하려고 할 때 :

#Here is the problem:

    elif any([opts.input, opts.output]):
        print '\ncompleted action\n'
        retrive(opts.input)
        write(opts.output)

내 간단한 프로그램은 그냥 멈 춥니 다. 나는 argparse를 처음 사용했으며 문제가 if / else 문을 올바르게 사용하는 것과 관련이 있다고 생각합니다. 따라서 간단한 프로그램의 메뉴는 어떻게 만들어야합니까?

hpaulj

여기서는 if / else 트리가 작동하도록하는 데 중점을두고 코드를 정리하고 압축했습니다.

파서에서 나는 short options단일 문자로 다시 썼습니다 . 또한 기본값을 None. 그러면 if테스트가 더 쉬워집니다. (경우에 어떻게해야 opts.input입니다 stdin및 테스트 if not opts.input:?).

import argparse
def quit():
    import sys
    sys.exit(1)

def perform_stuff(*args):
    print 'stuff', args

def retrive(*args):
    print 'retrieve', args        

if __name__ == '__main__':
    p = argparse.ArgumentParser()
    # single letter `-d` string; use default None
    p.add_argument('-d', '--input_data')
    p.add_argument('-t', '--targets')
    p.add_argument('-i', '--input')
    p.add_argument('-o', '--output')
    opts = p.parse_args()
    print 'opts', opts

    if not any([opts.input, opts.output, opts.targets, opts.input_data]):
        p.print_usage()
        print 'press -h to see the help'
        quit()

    elif any([opts.targets,opts.input_data]):
        perform_stuff(opts.input_data, opts.targets)
        quit()

    elif any([opts.input, opts.output]):
        retrive(opts.input, opts.output)
    else:
        print 'else'

샘플 실행 :

1814:~/mypy$ python stack36877714.py
opts Namespace(input=None, input_data=None, output=None, targets=None)
usage: stack36877714.py [-h] [-d INPUT_DATA] [-t TARGETS] [-i INPUT]
                        [-o OUTPUT]
press -h to see the help
1815:~/mypy$ python stack36877714.py -d input_data
opts Namespace(input=None, input_data='input_data', output=None, targets=None)
stuff ('input_data', None)
1815:~/mypy$ python stack36877714.py -t targets
opts Namespace(input=None, input_data=None, output=None, targets='targets')
stuff (None, 'targets')
1815:~/mypy$ python stack36877714.py -i input
opts Namespace(input='input', input_data=None, output=None, targets=None)
retrieve ('input', None)
1816:~/mypy$ python stack36877714.py -o output
opts Namespace(input=None, input_data=None, output='output', targets=None)
retrieve (None, 'output')

함수는 다음과 같이 작성할 수 있습니다.

def retrieve(in_arg, out_arg):
    if in_arg is None:
        data = sys.stdin.read()
        # cannot open/close stdin
    else:
        with open(in_arg,'r') as f:
            data = f.read()
    if out_arg is None:
        # write to sys.stdout
    else:
        # write to open(out_arg,'w')

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

파이썬 argparse를 사용하여 명령 줄 문제를 해결하는 방법은 무엇입니까?

이 문제를 해결하는 방법은 무엇입니까?

기본값을 제공하지 않고 이 문제를 해결하는 방법은 무엇입니까?

요소를 정렬 할 수 없습니다. 이 문제를 해결하는 방법은 무엇입니까?

욕심 많은 알고리즘. 이 문제를 해결하는 방법은 무엇입니까?

이 문제를 해결하기 위해 정렬 기능을 만드는 방법은 무엇입니까?

VSCode 고정 폭 글꼴은 고정 폭이 아닙니다. 이 문제를 해결하는 방법은 무엇입니까?

내 프로그램이 멈추고 반복되는 문제를 해결하는 방법은 무엇입니까?

이 압축 해제 문제를 해결하는 방법은 무엇입니까?

nltk 정규식으로이 문제를 해결하는 방법은 무엇입니까?

jq '.[]'는 jsonObject를 제공하지 않고 오히려 powershell에서 psobject를 제공합니다. 이 문제를 해결하는 방법은 무엇입니까?

OpenCL이 멈추는 문제를 해결하는 방법은 무엇입니까?

iOS : 다음 경고 문제를 해결하는 방법은 무엇입니까?

Flutter Signing App이 문제를 해결하는 방법은 무엇입니까?

이 ArrayList 문제를 해결하는 방법은 무엇입니까?

내 navbar로이 문제를 해결하는 방법은 무엇입니까?

이 HTML 간격 문제를 해결하는 방법은 무엇입니까?

이 Binary Tree Deserialize 문제를 해결하는 방법은 무엇입니까?

오버레이 문제를 해결하는 방법은 무엇입니까?

DataGridView에서이 문제를 해결하는 방법은 무엇입니까?

CTE로이 문제를 해결하는 방법은 무엇입니까?

이 "환경 개체" 문제를 해결하는 방법은 무엇입니까?

이 _tkinter.TclError 문제를 해결하는 방법은 무엇입니까?

이 캔버스 fillStyle 문제를 해결하는 방법은 무엇입니까?

npm 감사 수정 문제를 해결하는 방법은 무엇입니까?

pytest에서 찾을 수 없는 고정 장치 문제를 해결하는 방법은 무엇입니까?

문자열을 반복하려고 시도하는 이 문제를 해결하는 방법은 무엇입니까?

장고에서 많은 양의 데이터를로드하는 문제를 해결하는 방법은 무엇입니까?

이 기호를 해결할 수 없는 문제를 해결하는 방법은 무엇입니까?

TOP 리스트

  1. 1

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  2. 2

    MDRotatingPieChart를 회전하면 각도 대신 x / y 위치가 변경됩니다.

  3. 3

    c # 웹 사이트에서 텍스트를 복사하는 방법 (소스 코드 아님)

  4. 4

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  5. 5

    ArrayBufferLike의 typescript 정의의 깊은 의미

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    복사 / 붙여 넣기 비활성화

  8. 8

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    QT Designer를 사용하여 GUI에 이미지 삽입

  11. 11

    java Apache POI Word 기존 테이블 셀 스타일 및 서식이있는 행 삽입

  12. 12

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  13. 13

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  14. 14

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  15. 15

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  16. 16

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  17. 17

    dataSnapShot.getValue () 반환 데이터베이스에 그겁니다 데이터 종료 널 (null)

  18. 18

    ORA-12557 TNS : 프로토콜 어댑터를로드 할 수 없습니다

  19. 19

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  20. 20

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  21. 21

    C # Asp.net 웹 API-JSON / XML 변환기 API 만들기

뜨겁다태그

보관