Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java运行命令会产生空输出_Java_Command Line_Processbuilder - Fatal编程技术网

从java运行命令会产生空输出

从java运行命令会产生空输出,java,command-line,processbuilder,Java,Command Line,Processbuilder,我需要使用java运行下面的comand,但它在终端中运行良好 svn列表--用户名prasadh--密码prasadh2k>output.txt 但是,当通过process builder运行相同的程序时,它将返回空结果 我的代码: ProcessBuilder pb = new ProcessBuilder("cmd", "C:\\Users\\dev112\\output", "svn", "list", "http://192.168.0.19/svn/cadgraf/Branc

我需要使用java运行下面的comand,但它在终端中运行良好

svn列表--用户名prasadh--密码prasadh2k>output.txt

但是,当通过process builder运行相同的程序时,它将返回空结果

我的代码:

    ProcessBuilder pb = new ProcessBuilder("cmd", "C:\\Users\\dev112\\output", "svn", "list", "http://192.168.0.19/svn/cadgraf/Branch/Jobs/T0003SATHYABAMAT/Completedjobs", "--username", "prasadh", "--password", "prasadh2k", ">", "output.txt");
    pb.redirectErrorStream(true);
    try {
        Process p = pb.start();
        new Thread(new InputConsumerforImageMagick.InputConsumer(p.getInputStream())).start();
        try {
            System.err.println("Exited with: " + p.getErrorStream());
        } catch (Exception ex) {
            Logger.getLogger(AddImage.class.getName()).log(Level.SEVERE, null, ex);
        }
    } catch (IOException ex) {
        Logger.getLogger(AddImage.class.getName()).log(Level.SEVERE, null, ex);
    }

不要通过
cmd
。直接运行命令即可:

final Path cwd = Paths.get("c:\\Users\\dev112\\output");
Files.createDirectories(cwd);
final Path outfile = cwd.resolve("output.txt");

final ProcessBuilder pb = new ProcessBuilder("svn", "list",
    "http://192.168.0.19/svn/cadgraf/Branch/Jobs/T0003SATHYABAMAT/Completedjobs",
    "--username", "prasadh", "--password", "prasadh2k");

pb.directory(cwd.toFile());
pb.redirectOutput(outfile.toFile());

final int retcode = pb.start().waitFor();
更重要的是,如果输出到文件,为什么会得到流程的标准输出?做一个或另一个,而不是两个都做。如果输出到文件,则在执行命令后读取该文件的内容


将上述样本输出到一个文件中;只需在以后使用
文件打开该文件的流。newInputStream(outfile)
(也就是说,如果
retcode
为0;如果不是,则命令以错误结束;这也意味着您也应该将stderr重定向到某个地方)

I/O重定向在
ProcessBuilder
中不起作用。您可以使用以下命令调用
cmd.exe

new ProcessBuilder("cmd", "/c", "svn ... > output.txt");
(即,您必须使用两个参数调用
cmd

或者您必须重定向自己,也就是说,您需要启动一个后台线程,从进程中读取标准输出并将其写入
output.txt
。在这种情况下,您应该使用:

new ProcessBuilder("svn", "list", ...);
当参数中有空格时,前者是脆弱的。因此,我建议使用后者,尽管Java代码要复杂得多

您还应该了解哪些因素使处理外部流程更容易

或者使用Java7,您可以使用
pb.redirectOutput()

这对我很有用:

String command = "svn list http://192.168.0.19/svn/cc/Branch/Jobs/tt/jobs/ --username prasadh --password prasadh2k";
ProcessBuilder processBuilder = new ProcessBuilder(command.split());
processBuilder.redirectOutput(new File("C:/Users/dev112/output/", "output.txt"));
processBuilder.start();

您的意思是从“cmd/c command to run”中删除
/c
我建议您尝试在命令行上使用
cmd
运行整个命令,很可能您遇到了错误,因为您忽略了错误流,所以您看不到它。不,我尝试在文本文件中写入输出,但它正在创建文本文件,但没有在其中写入任何值。在这种情况下,您很可能需要
/C
为什么要执行
cmd
呢?当我尝试这样的“ProcessBuilder pb=new ProcessBuilder(“cmd”),“/C:\\Users\\dev112\\output”,“svn”,“list”,“,”,“--username”,“prasad”,“--password”,“prasadh2k”,“>”,“output.txt”);“输出文件没有创建。”“您需要启动一个后台线程,从进程中读取stdout并将其写入output.txt”注意:
redirectOutput()
仅在Java 7之后可用。@AaronDigulla是的,但路径也是。
Path
。这是2015年,对吗?:pfinal int retcode=pb.build().waitFor()这行我出错了。我也试过了,但还是一样result@PrasathBala是的,来自我的部件的错误,我修复了它。它应该是.start(),而不是.build().pb.redirectOutput(output.toFile());-->output.tofileError:java.io.IOException:无法运行程序”“:CreateProcess error=87,java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)处org.archiveindexer.dao.RuntimeDemo.main(RuntimeDemo.java:33)处的java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)处的参数不正确,原因是:java.io.IOException:CreateProcess error=87,java.lang.ProcessImpl.create(本机方法)和java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)的java.lang.ProcessImpl.start(ProcessImpl.java:136)处的参数不正确。。。还有一个