ホームページ > バックエンド開発 > Python チュートリアル > Bash コマンドがサーバー上の Python では失敗するのに、ローカルでは機能するのはなぜですか?

Bash コマンドがサーバー上の Python では失敗するのに、ローカルでは機能するのはなぜですか?

Linda Hamilton
リリース: 2024-12-18 13:30:18
オリジナル
892 人が閲覧しました

Why Do My Bash Commands Fail in Python on the Server But Work Locally?

Python での Bash コマンドの実行

サーバー上の Python スクリプト内で Bash コマンドを実行すると、同じコードであってもエラーが発生する場合がありますローカルで動作します。この一般的な理由の 1 つは、オペレーティング システムによって Bash が呼び出されるさまざまな方法にあります。

Bash について

Python では、subprocess モジュールを使用して Bash コマンドを実行できます。ただし、デフォルトの動作では /bin/sh が使用されます。これは、Bash のすべての機能をサポートするわけではない最小限のシェルです。 Bash 固有の構文が必要な場合は、次のように Bash 実行可能ファイルを明示的に指定する必要があります。

subprocess.run(command, shell=True, executable='/bin/bash')
ログイン後にコピー

シェルとシェルなし

subprocess.run( を呼び出すことができます) )shell=True またはshell=False を指定します。 shell=True を指定すると、シェルが解析する単一の文字列コマンドを指定できます。 shell=False を使用すると、シェルを使用せずに文字列引数のリストを実行可能ファイルに渡します。

shell=False を使用すると、シェルの機能が回避されますが、コマンドを引数に正確に解析する必要があります。 shlex.split() 関数はこれを支援します。

subprocess.run(shlex.split(command))  # shell=False
ログイン後にコピー

テキスト デコード

デフォルトでは、サブプロセス出力はバイトとして提供されます。 Unicode 文字列にデコードするには、text=True を使用します。

subprocess.run(command, shell=True, text=True)
ログイン後にコピー

トラブルシューティング

それでもエラーが発生する場合は、以下を確認することが重要です。

  • Bash コマンドが適切にフォーマットされ、サポートされていることを確認してください。
  • Bash 実行可能ファイル (/bin/bash) がサーバー上に存在することを確認します。
  • 出力が正しくデコードされていることを確認するには、text=True の使用を検討してください。
  • 使用より詳細な出力 (例: subprocess.run(..., check=True, stderr=subprocess.PIPE))。エラー。

以上がBash コマンドがサーバー上の Python では失敗するのに、ローカルでは機能するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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