从java调用nsupdate
我想从java调用bash脚本从java调用nsupdate,java,bind9,Java,Bind9,我想从java调用bash脚本nsupdate,以实现一种DDN。问题是无论我做什么,nsupdate都不会接受我试图编写的输入 这是我目前尝试的方式: publicstaticvoidmain(String[]args)抛出IOException、interruptedeexception{ ProcessBuilder=新的ProcessBuilder(“nsupdate”、“-i”); 重定向输出(ProcessBuilder.Redirect.PIPE); Process=builder
nsupdate
,以实现一种DDN。问题是无论我做什么,nsupdate
都不会接受我试图编写的输入
这是我目前尝试的方式:
publicstaticvoidmain(String[]args)抛出IOException、interruptedeexception{
ProcessBuilder=新的ProcessBuilder(“nsupdate”、“-i”);
重定向输出(ProcessBuilder.Redirect.PIPE);
Process=builder.start();
BufferedReader输入=新的BufferedReader(新的InputStreamReader(process.getInputStream());
BufferedReader error=新的BufferedReader(新的InputStreamReader(process.getErrorStream());
PrintWriter w=新的PrintWriter(process.getOutputStream());
w、 println(“服务器127.0.0.1\r”);
w、 println(“更新删除sub.domain.dev.A\r”);
w、 println(“更新add sub.domain.dev.2 A 12.23.45.56\r”);
w、 println(“发送\r”);
w、 println(“退出”);
进程。等待(10,时间单位。秒);
process.destroy();
}
我试过很多方法,但似乎都不管用。不幸的是,我无法使用文件作为参数传递,即使这种方式迄今为止效果最好。我认为您还需要重定向流程输入:
builder.redirectInput(ProcessBuilder.Redirect.PIPE);
我意识到我需要在每个命令后刷新输出流不,我只需要在每个命令生效后刷新输出流。。。您可以将您的PrintWriter
语句包装到try with resources块中,使其自动关闭(并刷新):try PrintWriter w=new PrintWriter(process.getOutputStream()){…}
好主意,但是我不想每次打印新行时都关闭流。我将把整个函数(我使用writer的部分)包装在其中,谢谢