Python ssh with fabric,代码127

时间:2016-12-11 15:26:10

标签: python windows ssh fabric ros

我试图在python中使用fabric将命令发送到另一台机器上的程序。

此代码可以正常工作:

from fabric.api import env, run

env.host_string = 'xxx.xxx.xxx.xxx'
env.user = 'username'
env.password = 'password'

run('ls')

但是在跑步时

run('rostopic list')

我得到了

Warning: run() received nonzero return code 127 while executing 'rostopic list'!
'/bin/bash: rostopic: command not found'

然而,如果我运行

,机器本身
rostopic list

它按照它应该

运行

我不确定如何继续,我不明白为什么它不使用面料。仅供参考我尝试用paramiko实现这个,但我也遇到了问题,但是它与pxssh一起工作正常。问题是我需要这个在Windows上工作,而且pxssh不兼容。如何使此命令与Fabric结合使用?

1 个答案:

答案 0 :(得分:0)

根据您对路径问题所做的评论,您似乎需要使用pathcd和/或prefix上下文的某些组合管理员,以便通过SSH连接运行ROS (Robot Operating System)命令。您可能还希望通过将Fabric完全排除在图片之外进行故障排除,而是通过this.radius = radius;使命令工作,如下所示:

ssh -t

使用Fabric的上下文管理器的示例如下所示:

$ ssh user@machine -t "cd /my/home/directory && /opt/ros/indigo/bin/rostopic list"

这是非常做作的,但希望说明这一点。无论如何,我首先要确保您可以通过with path('/opt/ros/indigo/bin/'): with prefix('always run this command'): with cd('/my/special/directory'): run('rostopic list') 运行命令。解决这个问题可能会让您找到使用Fabric实现这一目标的正确方法。

作为一方/相关考虑因素:这是远程计算机上的虚拟环境吗?您可以使用ssh -t上下文管理器来激活它,如下所示:

prefix

或者使用with prefix('/opt/ros/indigo/bin/activate'): run('rostopic list') ,您可以执行:

ssh -t