我需要在我的java程序中执行命令,但在执行命令后,它需要另一个参数(在我的情况下是一个密码)。如何管理Runtime.getRuntime().exec()
的输出过程以接受参数以进一步执行?
我试过了new BufferedWriter(new OutputStreamWriter(signingProcess.getOutputStream())).write("123456");
,但它没有用。
答案 0 :(得分:5)
您的程序是否没有--password选项?通常,所有基于命令行的程序都主要用于脚本。
Runtime.getRuntime().exec(new String[]{"your-program", "--password="+pwd, "some-more-options"});
或者更复杂的方式,更容易出错:
try {
final Process process = Runtime.getRuntime().exec(
new String[] { "your-program", "some-more-parameters" });
if (process != null) {
new Thread(new Runnable() {
@Override
public void run() {
try {
DataInputStream in = new DataInputStream(
process.getInputStream());
BufferedReader br = new BufferedReader(
new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
// handle input here ... ->
// if(line.equals("Enter Password:")) { ... }
}
in.close();
} catch (Exception e) {
// handle exception here ...
}
}
}).start();
}
process.waitFor();
if (process.exitValue() == 0) {
// process exited ...
} else {
// process failed ...
}
} catch (Exception ex) {
// handle exception
}
此示例打开一个新线程(请记住并发和同步),它将读取进程的输出。类似的,只要没有终止,您就可以使用输入来处理您的流程:
if (process != null) {
new Thread(new Runnable() {
@Override
public void run() {
try {
DataOutputStream out = new DataOutputStream(
process.getOutputStream());
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(out));
bw.write("feed your process with data ...");
bw.write("feed your process with data ...");
out.close();
} catch (Exception e) {
// handle exception here ...
}
}
}).start();
}
希望这有帮助。
答案 1 :(得分:2)
Runtime r=Runtime.getRuntime();
process p=r.exec("your string");
试试这种方式
答案 2 :(得分:1)
如果你使用windows
,你应该给你的windows命令参数访问此链接了解详情:http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html