問題タブ [processbuilder]

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.

0 投票する
1 に答える
440 参照

java - 作業パスを正しく設定する

出力はであると期待していましたが/server1/work/uz/rt/adapt/0/、代わりに次のようになります。

/work/uz/rt/adapt/0//server1/work/uz/rt/adapt/0/同等です(同じ場所にマウントされ、/ work / ..は正しいパスであり、/ server1 / work / ..はマウントされたパスです)が、/server1/work/uz/rt/adapt/0/他のサーバーはそのパスを介してのみ動作するため、下で作業する必要があります。

/server1/work/uz/rt/adapt/0/現在のパスを作成するにはどうすればよいですか?

言い換えると

public ProcessBuilderディレクトリ(ファイルディレクトリ)がディレクトリを正規ファイルに変換する理由。絶対ファイルパスを使用するにはどうすればよいですか?

私もハックソルンを試しました

これもうまくいきませんでした。

cd / server1 / ..行をbashスクリプトに追加し、pd.directory(..)行を削除することで、問題を解決しました。しかし、この問題(absolutePathでpd.directory(..)を使用できない理由)はまだ回答されていません... ???

0 投票する
4 に答える
14203 参照

java - バッチファイルをリモートで実行 Java

サーバー上にリモートにあるbatファイルを実行したい \\testserver\someFolderName\test.bat。私はプロセスビルダーを使用していて、ディレクトリを変更したかったのです procbuilder.directory(....), が、成功しませんでした.

どんな助けでも大歓迎です。ありがとう

0 投票する
2 に答える
3379 参照

java - java:ProcessBuilderはメモリを大量に消費します

ProcessBuilderに関していくつか問題があります。プログラムは基本的に、コマンドラインスクリプトを呼び出す単純なラッパーです。

ターミナルを介してスクリプトを単独で実行する場合、メモリ消費量は2G未満にとどまります。Javaラッパーを介してスクリプトを実行すると、メモリ消費量が爆発的に増加し、8Gでさえすぐにいっぱいになり、メモリ不足エラーが発生します。

プロセスを起動するためのコードは単純です。

StreamConsumerクラスは、単にstdout / stderrストリームを消費し、それらをコンソールに表示するクラスです。

...問題は、いったいなぜメモリ消費が爆発するのかということです。

よろしく、
アルノー

編集:

  • ProcessBuilderとRuntime.getRuntime.exec(...)のどちらを使用しても、結果は同じです。
  • メモリバーストは、次のシェルスクリプトによって呼び出されるUNIXの「ソート」中に表示される傾向があります。

ジム・ギャリソンの要求に応じて2を編集します。

わかりました。これは、かなり単純なため省略したStreamConsumerクラスです。

0 投票する
2 に答える
5470 参照

java - エラーが発生した後、ProcessBuilderがスタックする

.batファイルをリモートで実行し、次のコード行を実装しようとしています。

しかし、私のプログラムはwhileループ内でスタックします。表示されるエラーは次のとおりです。

whileループから抜け出すことはありませんが、スクリプトは正常に実行されます。どんな種類の助けもありがたいです。ありがとう

0 投票する
2 に答える
2999 参照

java - Java ProcessBuilder: コマンドが見つかりません

Linux で見つけた Java コードを実行しようとしています。

これにより IOException がスローされます - bash は「maude」コマンドを見つけることができません。

ただし、これは .bashrc ファイルでエイリアスされています。

次のようにコードを変更すると:

それは正常に動作します。

このコードを変更して、より堅牢にしたいと考えています。誰かがコマンド ラインで Maude を実行できる場合、ユーザーが Maude をリンクする特定の方法が何であれ、ProcessBuilder もそれを使用できるはずです。

これは達成できますか?

0 投票する
1 に答える
18204 参照

java - ProcessBuilderとRuntime.exec()

Inkscapeのコマンドライン機能を使用してバッチSVG変換を処理するフロントエンドアプリをJavaで作成しようとしています。https://sourceforge.net/projects/conversionsvg/からコードを取得して更新しています。元の開発者がRuntime.getRuntime()。exec(String)によるInkscapeの呼び出しを処理した方法。私が遭遇している問題は、methodAとmethodBの使用の間のいくつかの矛盾です。実行されているさまざまなアクションを示すために、単純なJavaテストプロジェクトを作成しました。

CallerTest.java

RuntimeExecCaller.java

ProcessBuilderCaller.java

結果

methodA(String)呼び出しは両方とも機能しますが、methodB (String [])が呼び出されると、Inkscapeが開始され、引数が正しく渡されません。methodB(String [])を実行した後、各発言に対してInkscapeエラーダイアログが表示されます

要求されたファイルのロードに失敗しました-fC:/test.svg -D -w 100 -h 100 -e C:\ RuntimeExec-methodB.png

要求されたファイルのロードに失敗しました-fC:/test.svg -D -w 100 -h 100 -e C:\ ProcessBuilder-methodB.png

ダイアログで[閉じる]をクリックすると、Inkscapeがポップアップして新しい空白のドキュメントが表示されます。だから、私はいくつかの質問があると思います:

Runtime.getRuntime()。exec(String)とRuntime.getRuntime()。exec(String [])の違いは何ですか?

JavaDocによると、Runtime.exec(String)Runtime.exec(command、null)Runtime.exec(String cmd、String [] envp))を呼び出し、Runtime.exec(cmdarray、envp)Runtime )を呼び出します。 .exec(String [] cmdarray、String [] envp))。それで、Runtime.getRuntime()。exec(String)がRuntime.exec(String [])を呼び出している場合、異なるメソッドを使用すると、なぜ異なる結果が得られるのですか?

どのメソッドが呼び出されるかによって、Javaが環境を異なる方法でセットアップする舞台裏で何かが起こっていますか?

0 投票する
3 に答える
11039 参照

java - Javaを介してLinuxの端末でコマンドを実行する

ユーザーが実行ボタンをクリックすると、ターミナルが開き、ターミナルで特定のコマンドが実行されるようにするスタンドアロンアプリケーションを作成しました。次のコードを使用して、ターミナルを正常に開くことができます...

上記のコードはターミナル ウィンドウを開きますが、コマンドを実行できません。誰でもその方法を教えてもらえますか?

0 投票する
2 に答える
10222 参照

java - スクリプト sh を実行している ProcessBuilder の問題

このコードを使用して、スクリプトを実行しようとしています:

エラーは発生しませんが、想定される結果も得られません。とにかく、ターミナルで同じコマンドを直接実行しようとしましたが、すべてが正しく機能していました。
私は何かが欠けていますか??

前もって感謝します

0 投票する
2 に答える
2587 参照

java - Javaのスペースを含む作業ディレクトリで外部実行可能ファイルを実行しますか?

Os x でプログラムを実行中に、別のサブディレクトリにあるファイルを unrar する必要があります。フリーウェアのコマンド ライン ツール unrar を呼び出してこれを行います。これは非常にうまく機能します。ただし、unrar は常に現在の作業ディレクトリ内のファイルを unrar します。つまり、実行されたプロセスの作業ディレクトリを指定するか、.jar ホーム フォルダー内の解凍されたすべてのファイルを取得する必要があります。これは、processBuilder.directory(dir) を使用するか、runTime.getRuntime().exec(args,null,dir)たとえば dir がファイルの場合、簡単に実行できます。これはうまく機能しますが、作業ディレクトリにスペースが含まれている場合は機能しません。簡単な例として:

使用中は機能しません:Process pr = Runtime.getRuntime().exec(cmd);代わりにコマンドを正常に起動しますが、jars 作業ディレクトリにすべてのファイルが残ります。代わりに processbuilder を使用し、 processbuilder.directory(dir);を使用してディレクトリを設定すると、次のメッセージが表示されて終了します。

ヘルプ?スペースを処理するにはどうすればよいですか? ファイルオブジェクトはそれらをパスの実際の部分のように扱うため、スペースの前にバックスラッシュを追加して文字通り役に立たないようにしました。

編集:全体をもう少し明確にするために:1.executeメソッドにコマンドとディレクトリをprocessbuilderに供給する別のメソッドがあります。すべてのディレクトリは前のメソッドによって検出され、存在します。これは、ディレクトリにスペースが含まれている場合を除いて機能します。2.作業ディレクトリを設定する必要があります。そうしないと、コマンドが間違った場所で実行されます。3. 次の方法でファイル オブジェクトを解析: dir=new File(dir.tostring.replace(" ","\ "); すべてのスペースの前にバックスラッシュを配置しても機能しません。 4. processbuilder の代わりに rt.exec を使用しても効果はありません。

どんなアイデアでも大歓迎です。

0 投票する
2 に答える
1087 参照

java - コマンドラインソフトウェアとJavaプログラムの統合

オープンソースのcプログラムをJavaプログラムと統合しています。

JNIを使​​おうとしましたが、やりたいことからは適切ではありませんでした。

cプログラムの使い方は以下の通りです。

このようにProcessBuilderクラスを使用してこのプログラムを実行できます。

しかし、オプションの引数がたくさんあるので、Javaプログラムを維持するための間違った方法のように見えます。

ソフトウェア設計の良い方法でこの問題を解決するためのアイデアはありますか?

前もって感謝します。