問題タブ [apache-commons-exec]
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.
java - Javaのコマンドプロンプトからスペースを含むファイルパスにアクセスする方法
Java プログラムからバッチ ファイルを実行しようとしています。例:「Program Files」のフォルダーにバッチ「abc.bat」があります。
Java プログラムからこのバッチを実行したいと考えています。CommandLine クラス、Commons-exec jar を使用しています。
上記のコードは、「Windows はファイルを見つけることができません。名前を正しく入力したことを確認してから、もう一度やり直してください」というエラーをスローします。そして、それはパスにスペースがあるためです。
だから、@ brso05がここで提供した答えを試してみましたが、うまくいきました。しかし、私はそれをFuture Classにしたいと思っています。以下のコードを見つけて、修正を手伝ってください。
私が言及したコードは機能しますが、バッチ ファイルのパスにスペースが含まれていると機能しません。これを修正するのを手伝ってもらえますか?
あなたが与えたスニペットは機能しますが、それをFutureに入れることはできません。希望どおりに機能しません。
前もって感謝します!
java - テスト スイートで作成されているすべてのサブプロセスを強制終了するにはどうすればよいですか?
Maven (プラグイン バージョン 1.7) と Aspectj-1.8.3 を使用しています。
私のシナリオは次のとおりです。テストしたいインストーラー jar があります。インストーラーは別の jar、Apache のユーティリティ commons-exec-1.3 をラップする my-common.jar ライブラリを使用し、それを使用してコマンドを実行します。私が書いたメソッドは次のようになります。
問題は、私のテストが別の jar、つまりインストーラーを実行し、インストーラー jar が別の jar を実行するため (app.jar という名前を付けます)、インストーラーが終了し、app.jar が実行され続けることです (最初に、インストーラー分割払いを行って環境を準備してから、app.jar を実行します)、テスト スイートが完了してもアプリ jar は終了しません (これは私の意図であり、本番環境での想定方法です)。
グローバルな目標は、統合テスト スイートで作成されているすべてのプロセスを強制終了することです。
私の解決策: プロセス ID は にのみ公開されるjava.lang.UNIXProcess
ため、すべてのプロセス ID を収集し、テスト スイートの最後で手動で終了することを考えました。
私はこのようなアスペクトを置くことを考えました:
これは、コードの一部を再設計せずに問題を解決するという私の考えでした。そのため、統合テスト スイートで作成されているすべてのサブプロセスを確実に終了させる方法を探しています。
どんな解決策も歓迎されます。
java - Apache Commons exec 入力の問題
プレーン テキスト キーをサード パーティの外部プログラムに渡して、出力を文字列にキャプチャしようとしています。サードパーティのプログラムが入力を「通常」として受け入れないことを除いて、すべてが機能しているようです。「入力が長すぎます」というエラーが表示されます。ただし、bash シェルで同じバイナリに対して同じテキスト セットを実行すると、意図したとおりに動作します。余分な文字を追加するものは何も見つからないようです。
私はこの例に従っています:Apache Commons Execで起動された実行可能ファイルに文字列引数をパイプする方法は?
私が正しければ、これはシェルで入力するのと同じはずです
動作します。stderr を正常に出力でき、stdout を取得することもできます (キーが拒否されたため、これはたまたま空白になっています)。
java - Java - apache commons exec、同じ「コンテキスト」で 2 つのコマンドを実行
コンテキストがここで使用する正しい言葉であるかどうかはわかりませんが、私が意味するのは次のようなものです
test.exe はフォルダー test にあり、フォルダー test から実行したいのですが、実行できることがわかっています
しかし、フォルダーtestから実行するにはtest.exeが必要です。
同じ「コンテキスト」で両方のコマンドを実行する方法はありますか?
私が試してみました:
しかし、予想通り見つかりませんtest.exe
でした。
java - Apache Commons Exec を使用してコピーする
Apache Commons API を使用してコピー コマンドを実行しようとしています。以下は私の努力です:
出力:
scp -i /Users/TD/.ssh/id_rsa /Users/TD/One.txt "root@my.server.com:/Leo/Ta/San Diego"
org.apache.commons.exec.ExecuteException: プロセスがエラーで終了しました: 1 (終了値: 1)
同じプログラムは、宛先フォルダーにスペースがなくても問題なく動作します。
String destination="/Leo/Ta/SanJose";
scp -i /Users/TD/.ssh/id_rsa /Users/TD/One.txt root@my.server.com:/Leo/Ta/SanJose
java - Runtime.getRuntime().exec() に関する基本的な質問
Runtime.getRuntime().exec() を使用して Java から外部アプリケーションを呼び出すことを学びました。使用できる processbuilders と apache commons exec もあります。
しかし、基本的な質問はほとんどありません。
サブプロセスの作成はどのように行われますか?. 親プロセスと同じメモリを継承しますか? 子プロセスのメモリ割り当てを制御できますか?
親プロセスが強制終了された場合、子プロセスも強制終了されますか?
子プロセスの作成が親プロセスに与える影響は、(リソースに関して) どれだけコストがかかりますか。
そうしている間に落とし穴はありますか?
オンラインで検索してみましたが、私の質問に対する明確な答えが見つかりませんでした。
ありがとう、
java - apache-commons-exec 複数のコマンドをセミコロンで実行する
Java アプリケーションでいくつかのコマンドを実行するために apache-commons-exec を使用しています。
「ls -la /home/user」を実行するとうまくいきます。
しかし、私はこのようなことを実行する必要があります
コマンドを CommandLine オブジェクトに入力しましたが、機能しません。
空の文字列と -559038737 終了コードを返します。
環境とスクリプトの性質(最初のものは必要な環境変数を設定します); すべての呼び出しをスクリプトに入れることはできません o 多くの解決策を試しましたが (すべてのコマンドを "'" のような引用符で囲むか、PumStreamHandlet 入力ストリームを使用するなど)、これまでのところ何も機能していません...
誰にもアイデアがありますか?
java - 利用可能になったサブプロセスから stdout ストリームを読み取る
私の Java アプリケーションでは、いくつかのスクリプトをサブプロセスとして実行し、Java からの stdout で出力を監視して、必要に応じて何らかの出力に対応できるようにする必要があります。
サブプロセスを生成し、実行されたスクリプトの stdout を入力ストリームにリダイレクトするために、apache commons-exec を使用しています。
私が抱えている問題は、ストリームから読み取るときに、サブプロセスの実行が完了するまで Java プロセスがブロックされることです。サブプロセスの最後まで出力に反応するのを待つことはできませんが、出力が利用可能になったら非同期で読み取る必要があります。
以下は私のJavaコードです:
この例では、サブプロセスは python スクリプトであり、データが入ってくると Java コードが応答していることを確認できるように、出力間に 1 秒の遅延を加えてカウントアップします。
Python コード:
LogOutputStreamImpl が各行を出力することを期待していますが、実際に起こっているのは、サブプロセスが完了するまでストリーム ブロックを読み取ってから、すべての出力を出力するということです。
これを意図したとおりに機能させるためにできることはありますか?