首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Paramiko时的环境变量差异

使用Paramiko时的环境变量差异
EN

Stack Overflow用户
提问于 2015-08-12 19:37:10
回答 2查看 10K关注 0票数 7

我通过终端(在Mac上)连接到SSH,并运行一个Paramiko Python脚本,由于某些原因,这两个会话的行为似乎不同。在这些情况下,PATH环境变量是不同的。

这是我运行的代码:

代码语言:javascript
运行
复制
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('host', username='myuser',password='mypass')
stdin, stdout, stderr =ssh.exec_command('echo $PATH')
print (stdout.readlines())

你知道为什么环境变量不同吗?

我怎么才能修复它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-16 03:49:22

使用Channel对象而不是SSHClient对象解决了我的问题。

代码语言:javascript
运行
复制
chan=ssh.invoke_shell()
chan.send('echo $PATH\n')
print (chan.recv(1024))

有关更多详细信息,请参阅documentation

票数 4
EN

Stack Overflow用户

发布于 2015-08-12 21:19:32

默认情况下,SSHClient.exec_command不会为会话分配伪终端。因此,一组不同的启动脚本是(可能是)来源的(特别是对于非交互式会话,.bash_profile不是来源)。和/或基于TERM环境变量的缺失/存在而采用脚本中的不同分支。

要使用ssh模拟默认的Paramiko行为,请使用-T开关:

代码语言:javascript
运行
复制
ssh -T myuser@host

请参阅ssh man

-T禁用伪tty分配。

相反,要使用Paramiko模拟默认的ssh行为,请将exec_commandget_pty参数设置为True

代码语言:javascript
运行
复制
def exec_command(self, command, bufsize=-1, timeout=None, get_pty=False):

不过,您应该更好地修复启动脚本,为所有会话设置相同的PATH,而不是通过在Paramiko中分配伪终端来解决此问题。

有关这一点,请参阅Some Unix commands fail with " not found", when executed using Python Paramiko exec_command

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31964108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档