我试图在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结合使用?
答案 0 :(得分:0)
根据您对路径问题所做的评论,您似乎需要使用path
,cd
和/或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