2017-04-03 11 views
-1

ruby​​を使ってサブプロセスを呼び出す良い方法を見つけようとしています。私はコマンドを内部に入れて新しい2番目のターミナルを起動し、最初のターミナルの最後のコマンドの後に新しいコマンドを実行したいと思います。この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) 

ルビーイムホテルトップで立ち往生し、lsの後にフォークを使用することによって解決started.Hereが私のRubyコードである

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と同じことをします。最初の端末から2番目のPythonコードのhtopを開始し、最初の端末でlsコマンドを実行します。これを私のルビーコードで試してみたらhtopで2番目のコマンドが実行された後は決して実行されません。目的は自動端末を開始し、最初に戻って次のコマンドを実行することです。 – user3487389

+0

'p'と' p1'は 'subprocess.Popen'からの戻り値が代入される変数であり、関数を返さないので' print'を意味することはできません。また、Rubyコードでは、 'system" iwconfig wlan0 "'を呼び出します。これはあなたのPythonコードの内容とは関係ありません。あなたの答えでは、あなたのPythonコードには見つからない 'sleep 2'を使用しています。おそらく予期しないことが起こるでしょう。最初のプロセスはそれよりも時間がかかります。スタックオーバーフローに関する最良の答えを得るには、実際に意味のある質問をするのが最善でしょう。 – Amadan

答えて

0

ないとhtopのは、第2端子と、最初のLS上で開始されます

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

私はまもなくルビーを学びます。

関連する問題