스택큐힙리스트
서브프로세스 출력을 숨기는 방법 본문
저는 우분투에서 eSpeak를 사용하며, 메시지를 출력하고 말하는 파이썬 2.7 스크립트를 가지고 있습니다.
import subprocess
text = 'Hello World.'
print text
subprocess.call(['espeak', text])
eSpeak는 원하는 소리를 생성하지만, (ALSA 라이브러리..., 소켓 연결 없음)과 같은 오류로 shell이 혼잡해져 이전에 출력된 내용을 쉽게 읽을 수 없습니다. 종료 코드는 0입니다.
불행하게도 이를 조용히하는 옵션이 문서화되어 있지 않으므로, 시각적으로만 음소거하고 열린 쉘을 추가 상호작용을 위해 깨끗하게 유지하는 방법을 찾고 있습니다.
이것을 어떻게 할 수 있을까요?
답변 1
파이썬 >= 3.3인 경우, 출력을 DEVNULL로 리디렉션하십시오.
import os
import subprocess
retcode = subprocess.call(['echo', 'foo'],
stdout=subprocess.DEVNULL,
stderr=subprocess.STDOUT)
파이썬 3.3 미만, 2.7 포함하여 사용하실 경우:
FNULL = open(os.devnull, 'w')
retcode = subprocess.call(['echo', 'foo'],
stdout=FNULL,
stderr=subprocess.STDOUT)
이것은 셸 명령을 실행하는 것과 실질적으로 동일합니다.
retcode = os.system(echo 'foo' &> /dev/null)
답변 2
서브프로세스 출력 숨기는 방법서브프로세스는 파이썬에서 외부 명령어를 실행할 때 주로 사용되는 기능입니다. 그러나 때로는 이 출력을 숨기고자 하는 경우가 있습니다. 이번 글에서는 파이썬에서 서브프로세스 출력을 숨기는 방법에 대해 자세히 알아보겠습니다.
서브프로세스는 파이썬에서 기본적으로 subprocess 모듈을 사용하여 실행됩니다. 이 모듈은 Popen 메서드를 사용하여 외부 프로세스를 호출하고, communicate 메서드를 사용하여 출력을 가져올 수 있습니다. 그러나 이 출력을 숨기고자 한다면 어떻게 해야 할까요?
가장 간단한 방법은 출력을 /dev/null로 리디렉션하는 것입니다. 이는 모든 출력을 무시할 수 있게 해주므로 출력을 숨길 수 있습니다. 이를 위해서는 subprocess 모듈의 Popen 메서드에서 stdout 및 stderr 인수를 subprocess.DEVNULL로 설정하면 됩니다.
예를 들어, 다음과 같이 명령어를 실행하여 출력을 숨길 수 있습니다.
```
import subprocess
subprocess.Popen(['ls', '-l'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
```
이 방법은 출력을 완전히 숨길 수 있지만, 때로는 출력이 필요한 경우도 있습니다. 이 경우에는 출력을 변수에 저장하거나 파일로 저장하는 방법을 사용할 수 있습니다.
먼저, 출력을 변수에 저장하는 방법은 communicate() 메서드를 사용하여 stdout 및 stderr 출력을 가져와 변수에 저장할 수 있습니다. 예를 들어, 다음과 같습니다.
```
import subprocess
p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print(out)
```
위 코드에서, Popen 메서드에 stdout 및 stderr 인수를 설정하여 subprocess.PIPE로 설정합니다. 그런 다음 communicate() 메서드를 사용하여 출력을 가져오고, 출력을 변수 out에 저장합니다.
다음으로, 출력을 파일로 저장하는 방법은 파일 핸들을 사용하여 출력을 파일로 쓰는 것입니다. 예를 들어, 다음과 같습니다.
```
import subprocess
with open('output.txt', 'w') as f:
subprocess.Popen(['ls', '-l'], stdout=f, stderr=f)
```
위 코드에서, open() 함수를 사용하여 출력을 저장할 파일을 열고 파일 핸들을 변수 f에 저장합니다. 그런 다음, Popen 메서드에서 stdout 및 stderr 인수를 파일 핸들 f로 설정하면 됩니다.
결론적으로, 파이썬에서 서브프로세스 출력을 숨기는 방법은 여러 가지가 있습니다. 출력을 /dev/null로 리디렉션하거나, 변수에 저장하거나, 파일로 저장하는 방법 등이 있습니다. 각 상황에 맞게 적절한 방법을 선택하여 사용하면 됩니다.