1. ホーム
  2. パイソン

[解決済み】サブプロセスの出力を非表示にする方法

2022-03-27 11:56:35

質問

UbuntuでeSpeakを使っていて、メッセージを印刷して話すPython 2.7スクリプトを持っています。

import subprocess
text = 'Hello World.'
print text
subprocess.call(['espeak', text])

eSpeak は目的の音を出しますが、シェルにエラー(ALSA lib..., no socket connect)が散乱し、さっき出力されたものを簡単に読めません。終了コードは0です。

残念ながら、その冗長性をオフにするための文書化されたオプションはありません。したがって、私は、視覚的にのみそれを黙らせ、さらなる対話のために開いているシェルをきれいに保つ方法を探しています。

どうすればいいのでしょうか?

どのように解決するのですか?

Python >= 3.3 の場合、出力を DEVNULL にリダイレクトしてください。

import os
import subprocess

retcode = subprocess.call(['echo', 'foo'], 
    stdout=subprocess.DEVNULL,
    stderr=subprocess.STDOUT)

Python <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")