2014-11-05 1 views
0

이것은 내 동료가 작성한 코드 조각입니다. 이 코드는 파이썬에서 인자 파서를 만들기위한 것이다.python : stdout argparse의 PIPE가 작동하지 않습니다.

if not sys.stdin.isatty(): 
    # Running in pipe mode 
    pipe_mode = True 
else: 
    opts.add_argument('address', nargs='+') 

우리가 stdin을 읽지 않는다면 무슨 일이 벌어지고있는 것입니까? 이것은 내가하려고하는 것입니다 :

저는 stdout을 파이프에 넣었으므로 작동해야합니다. 그러나 인수를 식별 할 수없는 경우이 오류가 발생합니다.

오류 (우리가 그것을 실행하는 명령 줄을 사용하는 경우이 기능은 잘 작동) : (말할 수 값 [1] = 시드니)

당신은 표준 입력을 설정하지 않기 때문에
usage: nomadly-cli-geocode [-h] [-o {parse,json,human}] [-u] 
nomadly-cli-geocode: error: unrecognized arguments: Sydney 

답변

1

는 자식 프로세스가 표준 입력을 상속 부모로부터. 부모의 표준이 터미널에 연결되어 있으면 자식 프로세스의 표준도 마찬가지입니다. 자녀의 표준 입력을 subprocess.NONE으로 설정하여 사용 중지합니다.

주소를 선택적 인수로 지정하십시오. 그리고 stdin이 아닌 address 인수의 값을 확인하십시오.

예 :

opt.add_argument("--address", "-a", nargs="*") 

... 

if not args.address: 
    # try to get address from stdin 
관련 문제