「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Pythonのサブプロセス出力を沈黙させるにはどうすればよいですか?

Pythonのサブプロセス出力を沈黙させるにはどうすればよいですか?

2025-01-26に公開
ブラウズ:749

How Can I Silence Subprocess Output in Python?

Python でのサブプロセス出力のサイレンシング: 包括的なガイド

Python プログラミングの領域では、Python スクリプト内から外部コマンドやプロセスを実行する必要がよくあります。サブプロセス モジュールは、この目的のための強力なメカニズムを提供し、Python プログラムがオペレーティング システムと対話し、制御された方法でコマンドを実行できるようにします。

サブプロセスを使用するときに直面する一般的な課題の 1 つは、実行されたコマンドによって生成される可能性です。不要な出力が表示されると、端末や出力表示が乱雑になり、スクリプト自体の出力の読みやすさが妨げられる可能性があります。これは、診断メッセージや詳細なステータス更新を提供するコマンドを使用する場合に特に一般的です。

Python 3.3 以降のアプローチ

Python バージョン 3.3 以降を使用している場合、サブプロセス出力のサイレンシングはDEVNULL 定数の導入により、タスクが簡単になりました。この定数は、書き込まれたデータを破棄し、出力をどこにも事実上リダイレクトするファイルのようなオブジェクトを表します。

DEVNULL を利用してサブプロセス出力を抑制するには、単に stdout ストリームと stderr ストリームの両方をそれにリダイレクトします。

import subprocess

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

このアプローチでは、サブプロセスからの標準出力ストリームと標準エラー ストリームの両方が DEVNULL デバイスに確実に送信され、不要なメッセージが端末に到達するのを防ぎます。

アプローチPython 2.7 以前の場合

広く使用されている Python 2.7 を含む 3.3 より前の Python バージョンの場合、サブプロセス出力をサイレント化するには、少し異なるアプローチが必要です。 Python 2.7 には DEVNULL 定数がないため、/dev/null ファイルを手動で開き、出力をそこにリダイレクトする必要があります。

Python 2.7 でこれを実現する方法は次のとおりです:

import os
import subprocess

FNULL = open(os.devnull, 'w')
retcode = subprocess.call(['echo', 'foo'],
    stdout=FNULL,
    stderr=subprocess.STDOUT)

/dev/null ファイル (書き込まれたデータを破棄する null デバイスを表す) を開き、それを stdout および stderr 引数として subprocess.call() に渡すことによって、すべてのサブプロセス出力を void に効果的にリダイレクトし、クリーンで整然としたターミナルを確保します。

代替方法: シェル コマンドリダイレクト

完全を期すために、シェル コマンドを使用して出力をリダイレクトする別のアプローチについて言及する価値があります。このメソッドは移植性が低く、一般に Python スクリプトでの使用は推奨されませんが、特定のシナリオでは便利です。

retcode = os.system("echo 'foo' > /dev/null")

このアプローチはシェル コマンドを直接実行し、> 演算子を使用して echo コマンドの出力を /dev/null にリダイレクトします。

どのアプローチであってもどちらを選択しても、共通の目標は、不要なサブプロセス出力を抑制し、クリーンで読みやすい出力表示を維持することです。これらの手法を利用すると、サブプロセスの出力を効果的に非表示にし、必要な情報のみがユーザーに表示されるようにすることができます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3