-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"
'Open3.capture3'是同步的,而'subprocess.Popen'是異步的。 Python的'subprocess.Popen'相當於'Open3.popen3'。你的例子很簡短,我看不到你用'p'和'p1'做什麼,所以我不能提供更多的評論。 – Amadan
P和P1的意思是print.What我想要做的是相同的蟒蛇,python代碼啓動htop從第一個終端到第二個,然後在第一個終端上執行ls命令。如果我嘗試這與我的紅寶石代碼我卡住了在htop處,並且在我的第二個命令從未執行之後。目標是啓動自動終端,然後返回到第一個並執行下一個命令。 – user3487389
'p'和'p1'不能表示'print',因爲它們是被賦予來自'subprocess.Popen'的返回值的變量,並且它不返回函數。在Ruby代碼中,你可以調用'system「iwconfig wlan0」',這與你的Python代碼中的內容無關。在你的回答中,你正在使用'sleep 2',它在你的Python代碼中找不到,並且可能會做出意想不到的事情,第一個過程需要比這更長的時間。爲了得到堆棧溢出的最佳答案,最好提出真正有意義的問題。 – Amadan