我有一个perl文件,用于远程检查ip地址。我需要在java.please中运行perl帮助我继续。
答案 0 :(得分:1)
您需要Runtime.getRuntime().exec()
方法。需要考虑的一些要点:
exec()
方法中不起作用。exec()
电话(上面提到的ProcessBuilder类简化了其中的一些问题。)
答案 1 :(得分:1)
ProcessBuilder示例
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import org.apache.commons.io.FileUtils;
OutputStreamWriter writer =null;
BufferedReader stdoutBR = null;
try {
File tmp = new File("temp_dir");
File cmdFile = File.createTempFile("foo", ".sh", tmp);
File stdout = File.createTempFile("foo_stdout", ".txt", tmp);
File stderr = File.createTempFile("foo_stderr", ".txt", tmp);
String script = "/usr/bin/perl foo.pl 2>"+stderr.getAbsolutePath()+" >"+stdout.getAbsolutePath()+" \n";
cmdFile.setExecutable(true);
FileUtils.writeStringToFile(cmdFile, script);
ProcessBuilder processBuilder = new ProcessBuilder(cmdFile.getAbsolutePath());
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
InputStream numbStream = process.getInputStream();
stdoutBR = new BufferedReader(new InputStreamReader(numbStream));
String line = null;
StringBuilder unexpectedOutput = new StringBuilder();
while ((line = stdoutBR.readLine()) !=null) {
unexpectedOutput.append(line);
unexpectedOutput.append("\n");
}
process.waitFor();
stdoutBR.close();
log.debug("Process exit value:"+process.exitValue());
if (process.exitValue() != 0) {
String stdoutString = FileUtils.readFileToString(stdout);
String stderrString = FileUtils.readFileToString(stderr);
throw new RuntimeException("Problem executing script. \nOutput:"+unexpectedOutput.toString()+"\nStdout:"+stdoutString+"\nStderr:"+stderrString);
}
String output = FileUtils.readFileToString(stdout);
FileUtils.deleteQuietly(cmdFile);
FileUtils.deleteQuietly(stdout);
FileUtils.deleteQuietly(stderr);
} finally {
try {
if (writer != null) {
writer.close();
}
}
catch (Exception e) {
//TODO
}
}