問題タブ [popen3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - このコードで Ruby Thread オブジェクトが連続してインスタンス化されないようにするにはどうすればよいですか?
今までスレッドを使ったことがなかったのですが、今回はこれに頼らざるを得ないと思います。cURL コマンド ラインの stdout と stderr を別々に処理したいのは、プログレス インジケーター (stderr に書き込まれる) のキャリッジ リターンを改行に交換したいからです。
私の質問は、stdout (stdout.each_char) を処理するときに、ループ サイクルごとに新しい Thread インスタンスを作成しないようにするにはどうすればよいですか? 時間がかかると思います。一度インスタンス化してから、停止や実行などのメソッドを使用したいと思います.
ruby - Ruby UTF-16エンコーディングだと思います
Open3を使用してシェルコマンド(UTF-16を出力することが知られている)を呼び出すWindows上で実行されているRubyプログラムがあります。
UTF_16LE への force_encoding が機能せず、例外がスローされた場合、単純にバイトを保存し、JSON 文字列としてエンコードし、UTF_8 としてエンコードします。
まあ....例外がスローされ、レスキュー句でバイトの出力配列をキャッチしました。次のようになります。
何らかの形式のテキストに戻すにはどうすればよいですか。例えば私がする場合:
プログラムで [100, 111, 103] を「犬」または [224, 164, 149, 224, 165, 129, 224, 164, 164, 224, 165, 141, 224, 164, 176, 224, 164, 190] 戻る "カケラ" ? 私の出力バイト配列が何を意味するのかを理解する方法はありますか?
- - - - - - - - - - - - - アップデート - - - - - - - - - - - - ---
少し掘り下げましたが、「デコード」が問題ではないため、しばらく時間がかかりました。ただし、変数messageに保持した配列で次のことを行いました。
エラーメッセージがUTF-16LEではないという点で、私の問題は解決しました。
しかし、これを実行すると、次の結果が得られました。
この奇妙に見える文字列またはバイト シーケンスをより意味のある "कुत्रा" に変換するにはどうすればよいですか?
ruby-on-rails - Rubyでサブプロセスをできるだけ速く実行するには?
iOS および Web クライアントと連携する Rails アプリケーションがあります。現在、Open3 を使用して Rails コントローラーからサブプロセスを生成し、MongoDB で node.js を実行しているチャット サーバーにデータを送信しています。しかし、本番環境で数日後、サブプロセスによって Rails アプリが非常に遅くなり、CPU 使用率が大幅に増加することがわかりました。
長期的な解決策は、チャット サーバーを Express などの REST API フレームワークでラップすることです。しかし、短期的には、サブプロセスの実行を高速化する方法 (スポーン、実行など) を簡単に修正したいと考えています。
何か案は?
ruby - Rubyを介してcmdコマンドを実行する
私はcで書かれた他のプログラムを実行するプログラムを書いています。これが私の最初の試みです
実際の出力:
望ましい出力:
それを行うためのより良い方法を知っている場合は、教えてください。私はルビーが初めてです。
ruby - ruby から bash スクリプトを実行しても正しい pid が生成されない
私はさまざまなジョブを実行するための Ruby フレームワークを開発しています。私がする必要があることの 1 つは、これらのジョブの出力を使用してすべてを整理するためにいつ終了したかを知ることです。私は問題なく使用していますが、一部の同僚が別のシステムで使用し始めており、非常に奇妙なことが起こっています. 私がしているのは、次を使用してコマンドを実行することです
後で、ジョブが次のように終了したかどうかを確認します。
私が実行しているシステム(Scientifi linux 6)では完全に動作しますが、私の友人がUbuntu 14.04(ruby 1.9.3p484を使用)で実行を開始したとき、コマンドはcmd1 && cmd2 && cmd3
各コマンドが同時に実行されるなどのコマンドの連結です次々にではなく、システムによって返された pid は、t.pid
実行されているさまざまなプロセスの pid のいずれでもありません。
コードを変更し、コマンドの連結を実行する代わりに、popen3 から呼び出されたコマンド内のすべてのコマンドを含むスクリプトを作成しますOpen3.popen3("./script.sh")
が、動作は同じです...すべてのコマンドが同時に実行され、その pid ruby は、どのプロセス pid でもないことを知っています...
これがルビー関連のものかどうかはわかりませんがscript.sh
、手動で実行すると期待どおりに動作し、コマンドを次々に実行するため、ルビーがそれに応じてプロセスを起動していないか、システムがプロセスを適切に読み取っていないようです。何が起こっているのか知っていますか?
どうもありがとう!
編集:実行中のコマンドは次のようになります
./myFit.exe h vlq.config &> output_h.txt && ./myFit.exe d vlq.config &> output_d.txt && ./myFit.exe p vlq.config &> output_p.txt
このコマンドは、Ruby スクリプト内ではなく手動で実行すると、完全に実行されます。まさにこのコマンドです。ruby スクリプトから実行すると、すべての myFit.exe 実行が同時に実行されます (ただし、&& を使用して実行する必要があるため、前のスクリプトが正常に機能する場合はそれらを実行する必要があります)。Myfit.exe は、フィットさせるためのツールであり、システム コマンドではありません。繰り返しますが、このコマンドは、手動で実行すると完全に実行されます。
ruby - Windows で Open3.popen3 が間違ったエラー Errno::ENOENT を返す
test.rb に次のコードがあります。
bar.exe
は、私が作成したコンソール アプリケーションで、 にありC:\Program Files\foo\
ます。私が実行するとbar.exe
:
- それは出力します
"Hello world!"
- のような任意の引数を指定すると
bar.exe /blah
、ヘルプ メッセージが出力されます。
実行するruby test.rb
と、次のエラーが表示されます。
コードを call に変更するとpopen3
:
エラーは表示されずErrno::ENOENT
、代わりにヘルプ メッセージが表示されますが、"Hello World"
出力が必要です。
解決策を探しましたが、「実行可能ファイルが見つからないときに Open3.popen3 が間違ったエラーを返すのはなぜですか?」への回答を含め、何も機能していません。
このエラーが発生する理由と解決方法を教えてください。
ruby-on-rails - open3 で使用するための rubymine の設定方法は?
問題
Rails アプリで xray -rails gemを使用していますが、ブラウザーでクリックしたときに正しいファイルに rubymine を開くようにしたいと考えています。これを設定する方法は不明でした。xray-rails gem は、open3 を使用してエディターでファイルを開きます。
ruby - Thor: stdout または stderr をキャプチャせずにコマンドを実行し、エラーで失敗する
別のツールからいくつかのテストを実行するための Thor スクリプトを作成しています。つまり、シェル コマンドを実行しています。コマンドからの stdout と stderr を継続的にコンソールに出力したいと思います。
最初の試みは単にバッククォートを使用することでしたが、当然、stdout/stderr は出力されません (むしろ、stdout は戻り値に取り込まれます)。
私の次のアプローチは、次のように Open3 を使用することでした。
ただし、上記のアプローチでは、stdout と stderr の両方から出力全体が取得され、最後にのみ出力されます。私のユースケースでは、失敗したテストと合格したテストの出力が利用可能になったときに表示したいと思います。
http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.htmlから、ストリームをチャンク単位で、つまり のgets()
代わりに を使用して読み取ることができることがわかりましたread()
。例えば:
それは最善かつ最もクリーンなアプローチのように見えますか? stderrの前に手動で stdout を印刷しようとする必要があるのは問題ですか?
ruby - 次の引数を「STDIN」に渡す
私はopen3を使用STDIN
してプログラムに渡し、次に読み取りと解析を行ってSTDOUT
います。e0
私のプログラムは、、e1 e2
などの形式の引数を期待しています。
新しい引数が与えられるたびに、STDOUT
変化します。引数として渡す次の数値を与える最初の結果を解析した後、次の引数を渡す方法がわかりません。これが私のコードです:
次の引数は に格納され@next_states
、1 つまたは複数の数値にすることができます。この配列の要素を使用して、プログラムの次の部分に進み、再度解析するにはどうすればよいですか?
ruby - ruby で open3 を使用して呼び出された dd コマンドの進行状況を追跡する
raspberry-pi OS イメージを microSD カードにコピーする進行状況を監視しようとしています。これは、Kill a process called using open3 in ruby に似ていますが、プロセスを強制終了しているのではなく、進行状況メッセージを発行するコマンドをプロセスに送信しています。
最初のセクション ('if false' の後) は、Open3.capture2eを使用して画像をフラッシュします。これは機能しますが、もちろん進捗情報は発行されません。
「else」の後のセクションは、Open3.popen2eを使用して画像をフラッシュします。また、'Process.kill("INFO", wait_thr.pid)' を発行するか、5 秒ごとに ^T (20.chr) を stdin ストリームに送信して、進行状況を表示しようとします。
Process.kill行は、「操作は許可されていません」というエラーを生成します。stdin.puts行はまったく効果がありません。
もう 1 つ... popen2e プロセスが点滅している間に、キーボードで ctrl-T を押すと、進行状況の応答が生成されます。プログラムでそれを行うことはできません。
どんな助けでも大歓迎です!