2012-09-06 38 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