2017-01-13 3 views
0

stdin에서 입력을 받아서 표준 출력으로 보내는 작은 파이썬 스크립트를 디버깅하고 싶습니다. 다음과 같이 사용 :pycharm의 sys.stdin에서 입력을 가져 오는 파이썬 스크립트 디버깅

내 테스트 데이터 파일에서 파이프 입력에 Pycharm 디버깅을 구성하는 방법이없는 것처럼 보입니다.

이 질문은 이전에 질문되었지만 기본적으로 "파일을 읽을 수있는 스크립트를 다시 작성할 수 없습니다."

는 I 다소간 이에 의해, 코드 크기를 두 배로 파일을하는 코드를 수정 :

필터()가 파라미터로서 기록 오픈 파일 오브젝트를
import argparse 

if __name__ == '__main__': 
    cmd_parser = argparse.ArgumentParser() 
    cmd_parser.add_argument('path', nargs='?', default='/dev/stdin') 
    args = cmd_parser.parse_args() 
    with open(in_path) as f: 
     filter(f) 

. 이것은 이전 버전과의 호환성을 허용하여 위와 같이 사용할 수있는 반면, 파일로부터의 입력으로 디버거에서 호출 할 수 있습니다.

나는 이것이보기 흉한 해결책이라고 생각한다. 더 깨끗한 대안이 있습니까? 어쩌면 별개의 파일에 추악함을 남기는 것이 있을까요?

답변

1

좀 더 간단하게하려면 argparse를 완전히 무시하고 sys.argv 목록을 사용하여 첫 번째 인수를 가져옵니다. 은`데프 필터 (파일)와 합병 할 때`비트 :`정의 (필터() 중 하나를 내 예에 표시되지 DEF)

import sys 

if len(sys.argv) > 1: 
    filename = sys.argv[1] 
else: 
    filename = sys.stdin 

with open(filename) as f: 
    filter(f) 
+0

나는하여 '경우 __name__ =='__main __ '을 필요 앞을 가정합니다. – mohawkTrail

+0

예, 위의 코드를'if __name__ == '__main __''블록 아래에 중첩시킬 수 있으므로 모듈로 가져올 때가 아니라 스크립트로 호출 될 때만 실행됩니다. – Jack