스택큐힙리스트

파이썬에서 stdout을 파일로 리디렉션하는 방법은 무엇인가요? 본문

카테고리 없음

파이썬에서 stdout을 파일로 리디렉션하는 방법은 무엇인가요?

스택큐힙리스트 2023. 4. 2. 19:01
반응형

파이썬에서 stdout을 임의의 파일로 리디렉션하는 방법은 무엇인가요?

긴 실행 Python 스크립트 (예 : 웹 어플리케이션)이 ssh 세션 내부에서 시작 및 백그라운드로 실행되고 ssh 세션이 닫히면, 응용 프로그램은 IOError를 생성하고 stdout에 쓰려고 시도 할 때 즉시 실패합니다. IOError로 인한 실패를 방지하기 위해 응용 프로그램 및 모듈이 stdout이 아닌 파일로 출력할 수 있는 방법을 찾아야 했습니다. 현재, nohup을 사용하여 출력을 파일로 리디렉션하고 작업이 완료되었으며, 궁금증 때문에 nohup을 사용하지 않고도 할 수 있는 방법이 있는지 궁금합니다.

저는 이미 sys.stdout = open('somefile', 'w')를 시도해봤지만, 여전히 몇몇 외부 모듈들이 터미널에 출력되는 것을 막지 못하는 것 같습니다 (혹시 sys.stdout = ... 라인이 전혀 실행되지 않았을 수도 있습니다). 제가 시험했던 보다 간단한 스크립트에서는 작동하는 것을 확인했지만, 아직 웹 어플리케이션에서 시험을 해보지 못한 상태입니다.

답변 1

만약 Python 스크립트 안에서 리디렉션을 하고 싶다면, sys.stdout 를 파일 개체로 설정하는 것으로 문제를 해결할 수 있습니다.

# for python3

import sys

with open('file', 'w') as sys.stdout:

print('test')

보다 일반적인 방법은 실행 시 쉘 리디렉션을 사용하는 것입니다 (Windows와 Linux에서 동일합니다).

$ python3 foo.py > file

답변 2

파이썬은 매우 강력한 프로그래밍 언어이며, 프로그래머들이 콘솔에 출력되는 내용을 파일로 저장할 수 있도록 기능을 제공합니다. 즉, 표준 출력을 파일로 리디렉션할 수 있습니다.

이 기능은 특히 유닉스 운영 체제에서 자주 사용됩니다. 이 기능은 다양한 용도로 활용되는데, 예를 들어 로그 파일을 생성하거나, 보고서를 작성하거나, 기타 유용한 정보를 수집하는 등의 작업을 수행할 수 있습니다.

리디렉션 기능을 사용하려면, 파이썬 프로그램을 실행할 때 명령어 라인에서 출력할 파일의 이름을 지정하면 됩니다. 다음은 예시 코드입니다.

```

import sys

sys.stdout = open(output.txt, w)

print(Hello, World!)

sys.stdout.close()

```

위의 코드에서는 sys.stdout을 파일 output.txt로 열고, Hello, World!를 출력했습니다. 출력 내용은 output.txt에 저장됩니다.

이 방법은 표준 출력뿐만 아니라 표준 에러도 파일로 리디렉션할 수 있습니다. 예시 코드는 다음과 같습니다.

```

import sys

sys.stderr = open(error.txt, w)

print(Error occurred!, file=sys.stderr)

sys.stderr.close()

```

위의 코드에서는 sys.stderr을 파일 error.txt로 열고, Error occurred!를 출력합니다. 출력 내용은 error.txt에 저장됩니다.

이렇게 함으로써, 파이썬을 이용해 파일 출력을 할 수 있습니다. 이를 활용하여 유용한 프로그램을 작성할 수 있습니다.

반응형
Comments