2011-02-12 7 views
0

기본적으로 내 프로그램을 stdout으로 원하지만 파일에 쓰는 옵션을 제공합니다. 내 자신의 인쇄 기능을 만들고 출력 파일이 있다는 테스트를 호출해야합니까? 아니면 더 나은 방법이 있습니까? 저에게는 비효율적 인 것처럼 보이지만 모든 인쇄 호출에 대해 테스트한다면 추가 호출이라고 생각할 수 있습니다. 나는이 스크립트의 적어도 장기적으로는 이것이 중요하지 않다는 것을 알고 있지만, 나는 좋은 습관을 배우려고하고있다.출력 리디렉션을 처리하는 가장 좋은 방법은 무엇입니까?

답변

2

파일 개체에 쓰고 프로그램이 시작되면 해당 개체가 sys.stdout 또는 사용자가 지정한 파일을 가리 키도록하십시오.

마크 바이어스의 대답은 유닉스와 비슷합니다. 대부분의 명령 줄 도구는 stdin과 stdout을 사용하고 사용자가 적합하다고 생각하는 방향으로 리디렉션하도록합니다.

+0

감사합니다. 이것은 아마도 제가 할 일입니다. – kryptobs2000

4

인쇄물을 사용하여 표준 출력하십시오. 다음,

python foo.py > output.txt 
+0

우수 점, 나는 그것을 생각하지 않았다. 그러나 나는 아직도 파일에 들어 가지 않기를 원하는 stdout에 상태 메시지를 출력하기 때문에이 특별한 경우에는 그렇게 할 수 없다. – kryptobs2000

+1

@ kryptobs2000 : 상태 및 오류 메시지에 대해 stderr이 있다는 것을 알고 있습니까? 상태 메시지를'sys.stdout'에 보내는 점은 무엇입니까? – tzot

-1

내 반응이 임시 파일에 출력하는 것 중 하나 STDIO 해당 덤프하거나 요청한 곳으로 이동 : 사용자가 파일에 출력을 리디렉션하기를 원한다면 그들은 그렇게 할 수 있습니다.

0

나는 당신이 할 수있는, 당신은 서브 프로세스 모듈을 사용하는 경우 당신은 당신의 명령 줄에서 취할 수있는 옵션에 따라 다음 로깅 모듈과 logging.handlers ... 스트림 출력 파일 등

0

를 사용하는 것이 좋습니다 열린 파일 객체에 대한 stdout 옵션을 갖는다. 이렇게하면 프로그램 내에서 파일로 리디렉션 할 수 있습니다.

import subprocess 
with open('somefile','w') as f: 
    proc = subprocess.Popen(['myprog'],stdout=f,stderr=subprocess.PIPE) 
    out,err = proc.communicate() 
    print 'output redirected to somefile' 
1

아니요, 별도의 인쇄 기능을 만들 필요가 없습니다. 파이썬 3.x의에서

# suppose f is an open file 
print >> f, "hello" 

# now sys.stdout is file too 
print >> sys.stdout, "hello" 

:

print("hello", file=f) 
# or 
print("hello", file=sys.stdout) 

그래서 당신이 정말로 파일과 표준 출력을 차별화 할 필요가 없습니다 파이썬 2.6에서는이 구문을 가지고있다. 그들은 동일합니다.

출력 장난감 예는, "안녕하세요"방법은 당신이 원하는 : 인쇄 절차는 표준 출력 또는 파일로 작동하는지의 추상화되어

#!/usr/bin/env python3 
import sys 

def produce_output(fobj): 
    print("hello", file=fobj) 
    # this can also be 
    # fobj.write("hello\n") 

if __name__=="__main__": 
    if len(sys.argv) > 2: 
     print("Too many arguments", file=sys.stderr) 
     exit(1) 

    f = open(argv[1], "a") if len(argv)==2 else sys.stdout 
    produce_output(f) 

하는 것으로.

+0

와우, 고마워, 나는 그걸 몰랐다. 파이썬 3 사용하고 아주 우아한 솔루션을 보인다. – kryptobs2000

관련 문제