ですから、Javaプログラムのcmdで実行できるコマンドを実行したいと思います。いくつかの研究をした後、私はこれを行う方法を見つけたと思いました。しかし、私のコードは機能しません。
私のコードは
import java.io.*;
public class CmdTest {
public static void main(String[] args) throws Exception {
String[] command = {"ag","startTimes conf.js >> pro.txt"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("./test-java/"));
Process p = builder.start();
}
}
プログラムは実行されますが、出力は生成されません。「ls-a」のような他のコマンドを使用しようとしましたが、それでも出力がありません。
誰かが私がこれをデバッグするのを手伝ったり、これを行うためのより良い方法を提案したりできますか?ありがとうございました
編集1:私はこれをMacで実行しています。デバッグに必要な場合
編集2:通常のlsおよびその他のコマンドは、皆さんが提供したソリューションで機能します。ただし、Javaプログラムでag(the_silver_searcher)コマンドを使用したいと思います。それを試してみると、次のエラーが発生します-
Exception in thread "main" java.io.IOException: Cannot run program "ag startTimes conf.js >> pro.txt": error=2, No such file or directory
既存の回答は、コードの問題を解決する方法に関する情報を提供しますが、コードが機能しない理由は提供しません。
シェルでプログラムを実行すると、プログラムが実行される前に、シェルによって重要な処理が実行されます。コマンドライン
String[] command = {"ag","startTimes conf.js >> pro.txt"};
ProcessBuilder builder = new ProcessBuilder(command);
コマンドag
が単一の引数で実行されることを前提としていますstartTimes conf.js >> pro.txt
-おそらくあなたがやりたいことではありません。さらに一歩進んでみましょう:あなたが書いたらどうしますか
String[] command = {"ag","startTimes", "conf.js", ">>", "pro.txt"};
ProcessBuilder builder = new ProcessBuilder(command);
?
これは、ことを前提としていますag
コマンドが知っている>>
その出力をリダイレクトするようにパラメータ-と、ここでシェルの出番です:>>
オペレータが命令であるシェルに伝える、それをプロセスの標準出力からの出力をどうしますか。プロセスag
は、シェルによって開始されたとき、このリダイレクトの概念をまったく持っておらず>>
、ターゲットファイル名についての手がかりをまったく持っていません。
この情報を使用して、他の回答のコードサンプルを使用してください。適切な帰属のためにそれらを私のものにコピーすることはしません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加