development

인쇄 출력을 TXT 파일로 리디렉션하는 방법

big-blog 2020. 12. 6. 21:45
반응형

인쇄 출력을 TXT 파일로 리디렉션하는 방법


Google, Stack Overflow 및 Python 사용자 가이드를 검색했지만 질문에 대한 간단하고 실행 가능한 답변을 찾지 못했습니다.

Windows 7 x64 컴퓨터에서 c : \ goat.txt 파일을 생성하고 파일에 "test"를 인쇄하려고합니다. StackOverflow에 제공된 예제를 기반으로 다음을 시도했습니다.

이 시점에서 나는 바이너리 조건을 기반으로 간단한 로그를 만드는 문서를 이해하지 못하기 때문에 로그 모듈을 사용하고 싶지 않습니다. 인쇄는 간단하지만 출력을 리디렉션하는 방법은 명확하지 않습니다.

인터 퍼터에 들어갈 수있는 간단하고 명확한 예가 가장 도움이됩니다.

또한 정보 사이트에 대한 모든 제안은 감사합니다 (pydocs가 아님).

import sys
print('test', file=open('C:\\goat.txt', 'w')) #fails
print(arg, file=open('fname', 'w')) # above based upon this
print>>destination, arg

print>> C:\\goat.txt, "test" # Fails based upon the above

Python 2.5 또는 이전 버전을 사용하는 경우 파일을 열고 리디렉션에서 파일 개체를 사용합니다.

log = open("c:\\goat.txt", "w")
print >>log, "test"

Python 2.6 또는 2.7을 사용하는 경우 print를 함수로 사용할 수 있습니다.

from __future__ import print_function
log = open("c:\\goat.txt", "w")
print("test", file = log)

Python 3.0 이상을 사용하는 경우 향후 가져 오기를 생략 할 수 있습니다.

인쇄 문을 전역으로 리디렉션하려면 sys.stdout을 설정할 수 있습니다.

import sys
sys.stdout = open("c:\\goat.txt", "w")
print ("test sys.stdout")

모든 인쇄물에 대한 출력을 리디렉션하려면 다음을 수행하십시오.

import sys
with open('c:\\goat.txt', 'w') as f:
    sys.stdout = f
    print "test"

약간 해커의 방법 (위의 답변과는 다르며 모두 유효한)은 콘솔을 통해 출력을 파일로 보내는 것입니다.

그러니 당신이 main.py

if True:
    print "hello world"
else:
    print "goodbye world"

넌 할 수있어

python main.py >> text.log

그러면 text.log가 모든 출력을 얻습니다.

이것은 이미 많은 print 문이 있고 특정 파일로 인쇄하기 위해 개별적으로 변경하고 싶지 않은 경우에 편리합니다. 상위 수준에서 수행하고 모든 인쇄물을 파일로 지정합니다 (단 하나의 대상에만 인쇄 할 수 있다는 단점이 있습니다).


이전 답변을 바탕으로 (간단한) 컨텍스트 관리자 스타일을 수행하는 데 완벽한 사용 사례라고 생각합니다.

import sys

class StdoutRedirection:
    """Standard output redirection context manager"""

    def __init__(self, path):
        self._path = path

    def __enter__(self):
        sys.stdout = open(self._path, mode="w")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout.close()
        sys.stdout = sys.__stdout__

그리고:

with StdoutRedirection("path/to/file"):
    print("Hello world")

또한 StdoutRedirection클래스 에 일부 기능 (예 : 경로를 변경할 수있는 메서드) 을 추가하는 것도 정말 쉽습니다.


함수의 file인수를 사용하면 print인쇄마다 다른 파일을 가질 수 있습니다.

print('Redirect output to file', file=open('/tmp/example.log', 'w'))

파이썬 3.6에서 간단

o = open('outfile','w')

print('hello world', file=o)

Perl에서했던 것과 같은 것을 찾고있었습니다.

my $printname = "outfile"

open($ph, '>', $printname) or die "Could not open file '$printname' $!";

print $ph "hello world\n";

이 간단한 두 줄의 코드를 편집하지 말고 모든 인쇄 문에 대해 .... open을 사용하여 사용해야하는 것으로 바꾸십시오. 그것은 나에게 유용하지 않을 것입니다. 그냥 댓글이나 답장을 추가하세요. 제 경우에는 한 입력 파일에 대해 한 번 두 개의 출력 파일을 연 다음 두 번째 입력 파일에 대해 닫았다가 다시 열고 루틴을 다시 반복했습니다.


from __future__ import print_function
log = open("s_output.csv", "w",encoding="utf-8")
for i in range(0,10):
   print('\nHeadline: '+l1[i]', file = log)

Please add encoding="utf-8" so as to avoid the error of " 'charmap' codec can't encode characters in position 12-32: character maps to "


Redirect sys.stdout to an open file handle and then all printed output goes to a file:

import sys
filename  = open("outputfile",'w')
sys.stdout = filename
print "Anything printed will go to the output file"

참고URL : https://stackoverflow.com/questions/4110891/how-to-redirect-the-output-of-print-to-a-txt-file

반응형