サブプロセスがゼロ以外の終了コードを返します: Python のサブプロセス エラーを解決するにはどうすればよいですか?

王林
リリース: 2023-06-24 16:42:31
オリジナル
2146 人が閲覧しました

Python では、サブプロセスは、プログラム内で他のプログラムやコマンドを非同期に実行できるようにする非常に便利なツールです。しかし、問題が発生する可能性があります。つまり、子プロセスがゼロ以外の終了コードを返します。これは、子プロセスの実行にエラーがあることを意味します。この記事では、この問題について説明し、いくつかの解決策を提供します。

  1. サブプロセスと終了コード

サブプロセスは、メイン プロセスによって作成され、バックグラウンドで実行される独立したプロセスです。メイン プロセスは、子プロセスにコマンドやデータを送信したり、子プロセスの出力結果を取得したりするなど、子プロセスと対話できます。

子プロセスは、タスクの完了後に終了コードを返します。通常の状況では、終了コードはゼロになるはずで、これは子プロセスが正常に実行されたことを示します。子プロセスでエラーが発生した場合、ゼロ以外の終了コードが返されます。

Python でサブプロセスを使用する場合、通常は Python のサブプロセス モジュールを使用します。このモジュールは、サブプロセスを作成するさまざまな方法を提供し、サブプロセスの出力と実行ステータスを監視できます。

  1. 子プロセス エラーの処理

子プロセス エラーを処理する前に、子プロセスから返される終了コードとエラー メッセージを知っておく必要があります。これを行うには、Python コードに次の行を追加します。

import subprocess

p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
output, error = p.communicate()

if p.returncode != 0:
    print("Error: Command failed with return code", p.returncode)
    print("Error message:", error.decode())
ログイン後にコピー

上記のコードでは、subprocess.Popen メソッドを使用してサブプロセスを作成し、stdout パラメーターと stderr パラメーターを使用して出力とエラーストリーム。また、シェル パラメーターを使用して、コマンド文字列をシェルで解釈するかどうかを示します。

子プロセスが完了したら、Popen オブジェクトの communication メソッドを使用して出力メッセージとエラー メッセージを取得し、Popen オブジェクトの returncode 属性をチェックしてエラーが発生したかどうかを判断します。ゼロ以外の終了コードが返された場合、子プロセスはエラーを返し、エラー メッセージを出力しました。

  1. 子プロセス エラーの解決

子プロセス エラーを解決するにはいくつかの方法があります:

3.1. コマンドを確認します

まず、子プロセスに割り当てられたコマンドが正しいことを確認する必要があります。これは明らかかもしれませんが、複雑なシステムではコマンド間の依存関係が複雑になる場合があるため、コマンド文字列の構文とパラメーターを再確認する必要がある場合があります。

3.2. 入力と出力の確認

子プロセスから返されるエラーは、入力または出力形式が正しくないことが原因である場合があります。 stdin を使用してサブプロセスにデータを入力する場合は、入力データが正しい形式であること、およびサブプロセスの出力で重要なデータが失われていないことを確認してください。

3.3. エラー メッセージの処理

Python のサブプロセス モジュールは、サブプロセスから返されたエラー メッセージを通知できますが、これらのメッセージをさらに処理する必要がある場合があります。たとえば、エラー メッセージをログ ファイルに記録して、後で確認することができます。

3.4. コマンド実行環境が正しいことを確認します

サブプロセスは、特定の環境変数およびパスで実行する必要がある場合があります。メイン プログラムでこれらの環境変数を変更する場合は、正しく実行されるように、子プロセスで環境変数が正しく設定されていることを確認する必要があります。

3.5. try-Except ステートメントを使用して例外を処理する

子プロセスの処理中にコードで例外が発生した場合は、try-Except ステートメントを使用して例外をキャッチし、ログに記録することができます。エラーメッセージ。例:

import subprocess

try:
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    output, error = p.communicate()

    if p.returncode != 0:
        raise subprocess.CalledProcessError(p.returncode, command, error)
except subprocess.CalledProcessError as e:
    print("Error: Command failed with return code", e.returncode)
    print("Error message:", e.output.decode())
ログイン後にコピー

上記のコードでは、try-excel ステートメントを使用して、子プロセスの呼び出し時に発生する例外をキャッチします。例外が発生した場合は、subprocess.CalledProcessError を使用して新しい例外を発生させ、リターン コードとエラー メッセージを渡します。

  1. 概要

サブプロセスは Python プログラムの強力なツールですが、サブプロセスがゼロ以外の終了コードを返すとエラーが発生しやすくなります。この問題を解決するには、コマンド、入出力を確認し、正しい実行環境を確認し、エラー メッセージを処理する必要があります。必要に応じて、try-Except ステートメントを使用して例外をキャッチし、エラー メッセージをログに記録することもできます。

以上がサブプロセスがゼロ以外の終了コードを返します: Python のサブプロセス エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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