【发布时间】:2022-01-21 17:11:35
【问题描述】:
我正在使用paramiko 的SSHClient 通过exec_command 方法控制服务器。但是,我没有在那里使用 python,因为它说 python not found 并且我意识到整个 conda 环境不存在。在我的本地机器上,我通过将shell=True 传递给subprocess 来解决它。问题:我如何在 paramiko 上执行此操作,或者,我应该运行另一个命令以将 conda 加载到服务器的 shell 中。
编辑:exec_command 提供 environment 可选关键字,但如果它有用的话,我不知道如何利用它。
【问题讨论】:
-
sshd always 运行一个 shell。 paramiko 没有等价于
shell=False,因为没有办法告诉远程服务器不要启动它。 -
您所依赖的更可能是远程 shell 被视为 login shell,这会影响它选择执行的点文件。
-
(当您传递命令时,默认情况下您不会获得登录 shell;这不是 paramiko 特有的;常规命令行 ssh 客户端的工作方式相同)。
-
...比较
ssh somehost,然后运行python,一旦它进入(获得登录shell)到ssh somehost python(从非交互式shell启动Python)。在这两种情况下仍然有一个 shell,但它运行的 dotfiles 是不同的。 -
有关在 shell 启动期间在什么条件下读取点文件的一般背景知识,请参阅
man bash的 Invocation 部分。完成此操作并确定哪些特定的点文件正在设置您的 Python 环境所需的内容后,您应该可以更好地决定要实施哪种解决方案。
标签: python shell ssh subprocess paramiko