[英]How to use processbuilder to run piped processes in windows
processbuilder does not allow redirecting inputstream/output streams. processbuilder不允许重定向输入流/输出流。 How can I create piped processes in java?
如何在Java中创建管道进程? I tried to use this command but it doesn't work.
我尝试使用此命令,但是它不起作用。
process = Runtime.getRuntime().exec("cmd","sort < randomwords.txt | sort /R >reversesortes.txt");
EDIT: Still this is not working. 编辑:仍然这是行不通的。
ArrayList<String> cmd = new ArrayList<>();
String s = "/R";
cmd.add("cmd");
cmd.add("sort");
cmd.add("<");
cmd.add("randomwords.txt");
cmd.add("|");
cmd.add("sort");
cmd.add("/R");
cmd.add( ">");
cmd.add("reversesortes.txt");
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectError(new File("error.txt"));
Process process = builder.start();
System.out.println("im here" );
int i = process.waitFor();
System.out.println("i"+ i );
As the name of the shell is cmd
, I assume that your OS is Windows. 由于外壳程序的名称是
cmd
,因此我假设您的操作系统是Windows。 cmd.exe
requires a /c
to introduce a command passed as parameter. cmd.exe
需要/c
来引入作为参数传递的命令。 In an interactive shell, this command: 在交互式外壳中,此命令:
C:\Users\sj>cmd echo foo
Microsoft Windows [version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation. Tous droits réservés.
C:\Users\sj>
only opens a new interactive shell waiting for commands on its standard input whereas 仅打开一个新的交互式外壳,以等待其标准输入上的命令,而
C:\Users\sj>cmd /c echo foo
foo
C:\Users\sj>
correctly executes the command passed as parameter. 正确执行作为参数传递的命令。
So you should write: 所以你应该写:
ArrayList<String> cmd = new ArrayList<>();
cmd.add("cmd");
cmd.add("/C");
cmd.add("sort < randomwords.txt | sort /R >reversesortes.txt");
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectError(new File("error.txt"));
Process process = builder.start();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.