2017-04-03 41 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" 

我会很快回来,即时通知学习红宝石。