ホームページ > バックエンド開発 > Python チュートリアル > Python でサブプロセス出力をサイレントにするにはどうすればよいですか?

Python でサブプロセス出力をサイレントにするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-28 19:59:12
オリジナル
225 人が閲覧しました

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 Operator.

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

以上がPython でサブプロセス出力をサイレントにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート