サブプロセスの出力を非表示にする方法 質問する

サブプロセスの出力を非表示にする方法 質問する

私は Ubuntu で eSpeak を使用しており、メッセージを印刷して読み上げる Python 2.7 スクリプトを持っています。

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

eSpeak は目的のサウンドを生成しますが、いくつかのエラー (ALSA lib...、ソケット接続なし) でシェルが乱雑になり、以前印刷された内容を簡単に読み取ることができません。終了コードは 0 です。

残念ながら、冗長性をオフにするオプションは文書化されていないため、視覚的にのみそれを無音にし、開いているシェルをクリーンな状態に保ち、さらに操作できるようにする方法を探しています。

これどうやってするの?


見る出力なしのPython os.systemに固有のアプローチについては、os.system- ただし、最新のコードでは通常、subprocess代わりにライブラリを使用する必要があります。

ベストアンサー1

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

おすすめ記事