Python Paramiko exec_command 中Unix 指令失敗並顯示「Command Not Found」
使用Python 的Paramiko exec_mand
使用Python 的Paramiko exec_mandS.遇到諸如“未找到”之類的錯誤。特別是使用 sesu 指令時,而 ls 等其他指令執行成功時,會出現此問題。
根本原因
原因在於 SSHClient.exec_command 的預設行為,它不會執行「登入」shell,也不為會話分配偽終端。因此,可能會執行不同的啟動腳本,並且可能無法設定特定的環境變數。
可能的解決方案
要解決此問題,可以採取多種方法: 利用完整指令路徑: - 使用sesu 執行檔的完整路徑,確保指令獨立於環境。
調整啟動腳本: - 修改啟動腳本以一致地設定互動式和非互動式會話的 PATH。
明確呼叫登入Shell:
使用--login 與相容的shell 執行腳本,例如:
bash --login -c "sesu test"
登入後複製
修改指令環境:
變更指令本身以包含特定環境設定:
PATH="$PATH;/path/to/sesu" && sesu test
登入後複製
-
強制使用偽終端:
(不建議)透過將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中文網其他相關文章!