首页  >  文章  >  后端开发  >  如何修复 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_command 执行 Unix 命令时,可能会遇到诸如“未找到”之类的错误。特别是在使用 sesu 命令时,而 ls 等其他命令执行成功时,会出现此问题。

根本原因

原因在于 SSHClient.exec_command 的默认行为,它不运行“登录”shell,也不为会话分配伪终端。因此,可能会运行不同的启动脚本,并且可能无法设置特定的环境变量。

可能的解决方案

要解决此问题,可以采取多种方法:

  1. 利用完整命令路径:使用 sesu 可执行文件的完整路径,确保命令独立于环境。
  2. 调整启动脚本: 修改启动脚本以一致地设置交互式和非交互式会话的 PATH。
  3. 显式调用登录 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