最近我正在尝试编写一个java应用程序来调用SCM.exe来执行代码加载作业。但是,在我通过java成功执行SCM加载命令后,我发现我实际上无法真正下载代码(因为使用命令行,需要在执行SCM加载命令后输入密码)。我是否知道在使用该过程在java中运行SCM后如何输入此密码?如何获取命令行的输出并在命令行中输入内容?
万分感谢 埃里克
答案 0 :(得分:0)
由于我不知道您的情况下究竟是什么SCM.exe,因此我只回答了抽象意义上的输入/输出重定向要求。我进一步假设您使用System(“...”)所需的任何参数调用SCM.exe,这是您无法传递任何进一步输入的地方(被调用进程的stdin)。
相反,您需要能够在收到密码请求后将其传递给其他进程的stdin,这是通过使用传统意义上的管道解决的(因为您可能是在Windows上,YMMV) 。更一般地说,您正在处理一个非常简单的IPC案例。
在Java中,你可以通过使用ProcessBuilder找到一个合适的解决方案[1](从来没有做过我自己,为了这个目的,我使用的东西比java简单得多,但我离题了......)。
解决方案的大纲是:
如果您需要进一步说明,可能需要提供有关您的方案的更多详细信息。
[1] http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html
答案 1 :(得分:0)
公共课考试{ public static void main(String [] args){
try {
System.out.println("");
String commands = "C:/swdtools/IBM/RAD8/scmtools/eclipse/scm.exe load -d C:/users/43793207/test -i test -r eric-repo";
// load -d C:/users/43793207/test -i test -r eric-repo
test test=new test();
test.execCommand(commands);
} catch (Exception e) {
e.printStackTrace();
}
}
public void execCommand(String commands){
//ProcessBuilder pb = new ProcessBuilder(Command);
//pb.start();
String line;
try {
//Process pp = Runtime.getRuntime().exec(commands);
System.out.println(commands);
Process process = new ProcessBuilder(commands).start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}