問題タブ [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 popen3でコマンドが存在するかどうかを確認しようとしています
次のコードでシステムコマンドが存在するかどうかを確認しようとしています:
ただし、次のエラー メッセージで単にクラッシュし、続行しません。
なぜ、どのように修正するのですか?
ruby - Open3.capture3 と rake を使用すると STDOUT が失われますか?
私が仕事で使用しているビルド システムは、いくつかの外部コンソール アプリケーション (特に Node.js) を呼び出します。
私が見ている問題は、STDOUT チャネルOpen3.capture3
が呼び出された後に機能しないように見えることです。たとえば、次のようなタスクがありますcompileLess
。
私が期待するのは次のようなものです。
しかし、Open3.capture3
disablesputs
およびprint
. 以下を明示的に使用して、それらを強制的に機能させることができます。
なぜうまくいかないのか知りたいだけです。
仕様:
- ウィンドウ 7 プロフェッショナル 32 ビット
- ルビー 1.9.3p392 (2013-02-22) [i386-mingw32]
- レーキ、バージョン 10.1.0
- ノード v0.10.22
ruby - 別の Ruby バージョンで子プロセスを開始する
デーモン キットを使用して、Amazon SQS メッセージをリッスンするバックグラウンド Ruby プロセスを開始しています。メッセージが受信されると、JRuby で実行する必要がある Open3.popen3 で子プロセスが開始されます。
デーモン キットは Process.daemon を使用してプロセスをデーモン化するため、バックグラウンド プロセスは MRI で実行する必要があります。しかし、これまでのところ、子プロセスを強制的に JRuby で実行することはできませんでした。
私はrbenvを使ってルビーのバージョンを管理しているので、最初はこれでうまくいくと思っていました:
しかし、子プロセスの出力で、「rbenv: jruby: command not found」というエラーが表示されました。
次に、rbenv が実行可能ファイルを実行する方法を追跡して、rbenv をバイパスし、JRuby で rp5 実行可能ファイルを直接実行できるようにしました。
最初に、フォルダー内に rp5 実行可能ファイルを見つけました: ~/.rbenv/versions/jruby-1.7.8/bin/rp5
次に、Gem.bin_path メソッドを実行して、呼び出している rp5 実行可能ファイルを見つけました。宝石の中にあるもの: ~/.rbenv/versions/jruby-1.7.8/lib/ruby/gems/shared/gems/ruby-processing-2.3.1/bin/rp5 そして、呼び出して子プロセスを実行しようとしましたこの rp5 実行可能ファイルを直接:
しかし、同じ「jruby コマンドが見つかりません」というエラーがまだ発生していました。
そして、その実行可能ファイルを調べました:
では、一番上のシバンは、この実行可能ファイルがデフォルトの Ruby バージョンを使用していることを意味するのでしょうか?
まったく異なる Ruby バージョンで子プロセスを起動することさえ可能ですか?
ありがとう。
linux - IPC::Open3 は、スタンドアロンの snmwalk コマンドとは異なる動作で snmpwalk を実行します
Open3 を使用して perl でさまざまな端末コマンドを実行するカスタム サブを作成しました。
snmpwalk で奇妙な問題が発生しました。ターミナルでコマンドを実行すると機能しますが、Open3 では機能しません。
サブはこれです:
私はそれを次のように呼び出します:
次のコマンドを実行したい場合:
snmpwalk -c public -v1 somehostname NETAPP-MIB::aggrName
$err として返されます。
snmpwalk: securityName が指定されていません
ターミナルでまったく同じコマンドを実行すると、結果が返されます。
NETAPP-MIB::aggrName.1 = 文字列: "SAS2"
NETAPP-MIB::aggrName.2 = 文字列: "SATA1"
...
NET::SNMP で問題が解決する可能性があることがわかりましたが、Linux OS が強化されており、インストール オプションがないため、インストールできません。
うまくいかない理由がよくわかりません。
パール -v: 5.8.8
ありがとう!
ruby-on-rails - ルビーオンレール。exeファイルの出力をブラウザに返す
RubyまたはRailsを初めて使用するので、ご容赦ください:) exeファイルの結果をブラウザに出力しようとしています。おそらく、事前に何らかの処理を行っています。私はOpen3を使用しています
これは機能しますが、手動で閉じた場合やエラーを返した場合など、exeファイルが終了したときにのみ出力が返されるようです。
ファイルを実行すると実際に何が起こるかというと、サーバーが実行され、コンソールに情報が返されます。実行後ではなく、実行中にコンソールでこのデータが必要です。
私の質問:コンソールから各行をリアルタイムで返し、処理し、表示するにはどうすればよいですか? それは可能ですか?
ruby - 実行可能ファイルが見つからない場合、Open3.popen3 が間違ったエラーを返すのはなぜですか?
CLI の周りに Ruby ラッパーを作成しています。そして、コマンドを実行し、stdout、stderr、および終了コードをキャプチャできる、きちんとした方法Open3.capture3
(内部的に を使用) を見つけました。Open3.popen3
私が検出したいことの 1 つは、CLI 実行可能ファイルが見つからない場合です (そのために特別なエラーが発生します)。127
コマンドが見つからない場合、UNIX シェルは終了コードを返すことを知っています。そして$ foo
、bash で実行すると-bash: foo: command not found
、まさに表示したいエラー メッセージが表示されます。
これらすべてを念頭に置いて、次のようなコードを書きました。
しかし、で実行するとcommand = "foo"
、エラーが発生します。
なぜこのエラーが発生するのですか? そのコマンドをシェルで直接実行することになっていると思っOpen3.capture3
ていましたが、通常の STDERR と終了コードを取得しないのはなぜ127
ですか?