2016-12-11 8 views
0

파이썬에서 fabric을 사용하여 다른 컴퓨터의 프로그램에 명령을 보내려고합니다.파이썬 ssh (코드 127)

이 코드는 잘 작동 :

run('rostopic list') 

를 실행할 때 나는 그러나 내가 실행하면 컴퓨터 자체에

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

을 얻을

from fabric.api import env, run 

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

run('ls') 

을하지만

rostopic list 
,

그것은 다음과 같이 실행됩니다.

나는 어떻게 진행해야할지 모르겠다. 왜 그것이 직물과 작동하지 않는지 이해할 수 없다. 참고하시기 바랍니다 paramiko 함께 구현했지만 또한 문제가 실행되지만 pxssh 제대로 작동합니다. 문제는 Windows에서 작동하려면이 기능이 필요하며 pxssh는 호환되지 않습니다. 이 명령을 fabric으로 작동 시키려면 어떻게합니까? 당신이 경로 지정 문제에 대한했습니다 코멘트에서

+0

는 당신에게 SSH 세션에 대한 쉘 환경 정확한지 있습니까? '/ bin/bash'와 비교해서'/ bin/sh'를 실행하고있는 것처럼? –

+0

/bin/sh에서 어떻게 실행합니까? 쉘 환경을 어떻게 바꿀 지 모르겠습니다. 지금까지 나는이 명령을 파이썬 명령어 라인 – frenchie007

+0

에서 실행했다. 이미'/ bin/sh'에서 실행 중일 수도있다. 그게 내 포인트 야, 그 'bash는'다른 PATH 환경을 가질 수 있으므로 당신이 명령을 실행할 수 있도록 –

답변

0

, 그것은 당신이 path, cd의 조합을 사용해야합니다 같은 소리, 및/또는 SSH 연결을 통해 ROS (Robot Operating System) 명령을 실행하기 위해 prefix 컨텍스트 매니저. 또한과 같이, ssh -t를 통해 작업을 완전히 그림에서 직물을 얻어서 문제를 해결하고, 대신 명령을 받고 작업을 할 수 있습니다

$ ssh [email protected] -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') 

꽤 고안된 것이지만 그 점을 분명히 보여줍니다. 그럼에도 불구하고 나는 먼저 ssh -t을 통해 명령을 실행할 수 있는지 확인해야합니다. 이 문제를 해결하면 Fabric에서이 문제를 해결할 수있는 올바른 방법이 될 것입니다.

측면/관련 고려 사항 : 이것은 원격 시스템의 가상 환경입니까? 당신과 같이 그것을 활성화 prefix 컨텍스트 관리자를 사용할 수 있습니다

with prefix('/opt/ros/indigo/bin/activate'): 
    run('rostopic list') 

또는 ssh -t 사용하여, 당신은 실행할 수 있습니다 :

$ ssh [email protected] -t "/opt/ros/indigo/bin/activate && rostopic list" 
+0

Windows에서 작동하려면이 파일이 필요합니다. 또한 plink.exe를 가지고 놀아 왔고'plink -pw password user @ xxx.xxx.xxx.xxx'를 실행할 때'rostopic' 명령이 작동하는 것으로 나타났습니다. 대화식 셸을 사용합니다. 그러나'plink -pw password [email protected] rostopic list' 명령을 직접 보내면'bash : rostopic : command not found '와 같은 오류가 있습니다. – frenchie007