首頁  >  文章  >  後端開發  >  如何修復 Python Paramiko exec_command 中的「找不到指令」錯誤?

如何修復 Python Paramiko exec_command 中的「找不到指令」錯誤?

DDD
DDD原創
2024-10-21 06:58:30768瀏覽

How to Fix

Python Paramiko exec_command 中Unix 指令失敗並顯示「Command Not Found」

使用Python 的Paramiko exec_mand

使用Python 的Paramiko exec_mandS.遇到諸如“未找到”之類的錯誤。特別是使用 sesu 指令時,而 ls 等其他指令執行成功時,會出現此問題。

根本原因

原因在於 SSHClient.exec_command 的預設行為,它不會執行「登入」shell,也不為會話分配偽終端。因此,可能會執行不同的啟動腳本,並且可能無法設定特定的環境變數。

可能的解決方案

    要解決此問題,可以採取多種方法:
  1. 利用完整指令路徑:
  2. 使用sesu 執行檔的完整路徑,確保指令獨立於環境。
  3. 調整啟動腳本:
  4. 修改啟動腳本以一致地設定互動式和非互動式會話的 PATH。
  5. 明確呼叫登入Shell:
使用--login 與相容的shell 執行腳本,例如:
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)
    [某些Unix 指令在JSch 失敗並顯示「...未找到」](https:// stackoverflow.com/questions/44950115/ certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch)

以上是如何修復 Python Paramiko exec_command 中的「找不到指令」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn