2012-09-06 36 views
0

我正在运行下面显示的python脚本。该脚本对远程计算机执行ssh并在后台运行c程序。但是在运行python脚本时,我得到以下输出:进程不在后台

这表示a.out已运行,并且pid是[1] 2115。 但是,当我登录到远程机器并通过'ps'命令检查a.out时,我没有看到它。 另一个观察结果是,当我在Python脚本thread.sleep(20)中添加延迟语句时,并且脚本仍在运行时,如果我在远程计算机中检查,则a.out处于活动状态。

#!/usr/bin/python 
      import HostMod #where ssh function is wrote 
      COMMAND_PROMPT1 = '[#$] ' 
      p = HostMod.HostModule() 
      obj1=p.HostLogin('10.200.2.197', 'root', 'newnet') #ssh connection to remote system 
      obj1.sendline ('./a.out > test.txt &') #sending program to remote machine to executethere 
      obj1.expect (COMMAND_PROMPT1) 
      print obj1.before 
      #a.out program 
      int main() 
      { 
        while(1) 
        { 
          sleep(10); 
        } 

        return 0; 
      } 
+1

为什么不使用像ssh这样的Fabric? –

回答

0

请尽量给人./a.out

+0

我给了绝对路径,然后也期望它的输出不comin – user1652226

0

绝对路径尝试使用nohup

... 
obj1.sendline ('nohup ./a.out > test.txt &') #sending program to remote machine to executethere 

,但你应该真的不使用shell通过ssh来调用命令。 ssh协议具有对运行命令的内置支持。我不知道你的HostMod模块是如何工作的,但你可以从你的shell试试这个(很容易地移植到使用subprocess):

ssh somehost nohup sleep 20 
<Ctrl+C> 

ssh somehost 
ps ax | grep sleep 

,你会看到你的sleep进程仍在运行。这种方法没有实例化一个更加可靠的shell,因为你可能或不可能控制运行哪个shell,你的~/.(...)rc文件中有什么,等等。总而言之,更便携。

+0

非常感谢你我得到了我需要的输出 – user1652226