2017-04-03 62 views
-1

我試圖找到用ruby調用子進程的好方法。我想用裏面的commande啓動一個新的第二個終端,然後在第一個終端上的最後一個終端之後執行一個新的命令。我想要做的像這個python短代碼一樣的紅寶石。ruby​​的子進程

import os 
import subprocess 
htop = "x-terminal-emulator -e 'bash -c \"htop; exec bash\"'" 
ls = "ls" 
p = subprocess.Popen(htop, shell=True, stderr=subprocess.PIPE) 
p1 = subprocess.Popen(ls, shell=True, stderr=subprocess.PIPE) 

這裏HTOP啓動第二終端上,然後LS在第一,與停留在HTOP紅寶石IM和LS後不started.Here是我的紅寶石代碼

stdout, stdeerr, status = Open3.capture3("x-terminal-emulator -e bash -c htop") 
sleep 2 
system "iwconfig wlan0" 
+1

'Open3.capture3'是同步的,而'subprocess.Popen'是異步的。 Python的'subprocess.Popen'相當於'Open3.popen3'。你的例子很簡短,我看不到你用'p'和'p1'做什麼,所以我不能提供更多的評論。 – Amadan

+0

P和P1的意思是print.What我想要做的是相同的蟒蛇,python代碼啓動htop從第一個終端到第二個,然後在第一個終端上執行ls命令。如果我嘗試這與我的紅寶石代碼我卡住了在htop處,並且在我的第二個命令從未執行之後。目標是啓動自動終端,然後返回到第一個並執行下一個命令。 – user3487389

+0

'p'和'p1'不能表示'print',因爲它們是被賦予來自'subprocess.Popen'的返回值的變量,並且它不返回函數。在Ruby代碼中,你可以調用'system「iwconfig wlan0」',這與你的Python代碼中的內容無關。在你的回答中,你正在使用'sleep 2',它在你的Python代碼中找不到,並且可能會做出意想不到的事情,第一個過程需要比這更長的時間。爲了得到堆棧溢出的最佳答案,最好提出真正有意義的問題。 – Amadan

回答

0

通過使用叉解決

fork { exec "x-terminal-emulator -e bash -c htop" } 
sleep 2 
    system "ls" 

我會很快回來,即時通知學習紅寶石。