ホームページ  >  記事  >  バックエンド開発  >  Python Paramiko exec_command で「コマンドが見つかりません」エラーを修正する方法?

Python Paramiko exec_command で「コマンドが見つかりません」エラーを修正する方法?

DDD
DDDオリジナル
2024-10-21 06:58:30768ブラウズ

How to Fix

Python Paramiko exec_command で Unix コマンドが「コマンドが見つかりません」で失敗する

Python の Paramiko exec_command を使用して Unix コマンドを実行すると、次のような問題が発生する可能性があります。 「 が見つかりません。」などのエラー。この問題は、ls などの他のコマンドが正常に実行される一方で、sesu コマンドを使用する場合に特に発生します。

根本的な原因

原因は、SSHClient.exec_command のデフォルトの動作にあります。これは「ログイン」シェルを実行せず、セッションに疑似端末を割り当てません。その結果、異なる起動スクリプトが実行され、特定の環境変数が設定されない可能性があります。

考えられる解決策

これを解決するには、いくつかのアプローチが可能です。

  1. 完全なコマンド パスを使用する: コマンドが環境に依存しないように、sesu 実行可能ファイルへの完全なパスを使用します。
  2. 起動スクリプトを調整します: 起動スクリプトを変更して、対話型セッションと非対話型セッションの両方に一貫して PATH を設定します。
  3. ログイン シェルを明示的に呼び出す: 次のような互換性のあるシェルで --login を使用してスクリプトを実行します。
bash --login -c "sesu test"
  1. コマンド環境の変更: 特定の環境設定を含めるようにコマンド自体を変更します:
PATH="$PATH;/path/to/sesu" && sesu test
  1. 擬似端末の強制使用: (非推奨) get_pty を True に設定して擬似端末割り当てを有効にします:
stdin,stdout,stderr = ssh.exec_command('sesu test', get_pty=True)

その他の考慮事項

  • LD_LIBRARY_PATH を検証し、共有オブジェクトが正確に特定されていることを確認します。
  • 詳細については、次のリソースを参照してください:

    • [Paramiko を使用する場合の環境変数の違い](https ://stackoverflow.com/questions/13781377/environment-variable-differences-when-using-paramiko)
    • [JSch で特定の Unix コマンドが「... Not Found」で失敗する](https:// stackoverflow.com/questions/44950115/certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch)

以上がPython Paramiko exec_command で「コマンドが見つかりません」エラーを修正する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。