java调用脚本
来源:互联网 发布:手机八字排盘命理软件 编辑:程序博客网 时间:2024/06/08 12:00
在Java 中如何调用各种脚本(shell,perl,python...)? 我们肯定会想到使用 Runtime.getRuntime().exec(cmd). 不过实际中根据需求会有更多更复杂的处理。 当有很多的脚本需要任务调度, 现在粗略给出一种解决办法 。
1. 开启一个服务端(单独的线程)专门来接受脚本
- public class ScriptRunnerService {
- private static int port = 4444;
- public static void main(String[] args) {
- ScriptRunnerService srs = new ScriptRunnerService();
- String hostIp = args[0];
- String hostPort = args[1];
- srs.go(hostIp, hostPort);
- }
- public void go(String hostIp, String hostPort) {
- try {
- ServerSocket listener = new ServerSocket(Integer.valueOf(hostPort), 0, InetAddress.getByName(hostIp));
- Socket clientSocket;
- while (true) {
- clientSocket = listener.accept();
- Thread t = new Thread(new ServiceRunner(clientSocket));
- t.start();
- }
- } catch (IOException ioe) {
- System.out.println("IOException on socket listen: " + ioe);
- } finally {
- }
- }
- class ServiceRunner implements Runnable {
- private Socket clientSocket;
- ServiceRunner(Socket clientSocket) {
- this.clientSocket = clientSocket;
- }
- @Override
- public void run() {
- int result = 1;
- String line;
- StringBuilder command = new StringBuilder();
- BufferedReader br = null;
- BufferedWriter bw = null;
- try {
- System.out.print("command receiving...");
- br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
- if ((line = br.readLine()) != null) {
- command.append(line);
- }
- bw = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
- System.out.println(command);
- Process p = Runtime.getRuntime().exec(command.toString());
- result = p.waitFor();
- p.destroy();
- write(bw, command.toString() + "\r\n");
- } catch (InterruptedException ie) {
- write(bw, ie.getMessage() + "\r\n");
- } catch (IOException ioe) {
- write(bw, ioe.getMessage() + "\r\n");
- } finally {
- write(bw, "..Result.." + result + "\r\n");
- write(bw, "..Command.." + command.toString() + "\r\n");
- write(bw, "Host...." + clientSocket.getInetAddress().getHostAddress() + "\r\n");
- try {
- clientSocket.close();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- System.out.println("\t\tcommand finished with result: " + result);
- }
- }
- }
- private void write(BufferedWriter bw, String msg) {
- try {
- bw.write(msg);
- bw.flush();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- }
- }
- public class AppInitializer{
- public void execScriptService(){
- String[] envParams = {"java -cp";, completeClasspath, ScriptRunnerService.class.getName(),“127.0.0.1”,“4445”};
- ScriptRunnerService scriptRunnerProcess = Runtime.getRuntime().exec(envParams);
- }
2. 客户端专门接受服务端的返回消息
- public class SocketTransport {
- protected Logger log = new Logger(SocketTransport.class.getName());
- public String query(String host, int port, String queryString) throws IOException {
- String line;
- BufferedReader rd = null;
- BufferedWriter wr = null;
- Socket serverSocket = null;
- StringBuilder response = new StringBuilder();
- try {
- serverSocket = new Socket(InetAddress.getByName(host), port);
- wr = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream(), "UTF8"));
- log.warn("sending request: %s to %s:%s ", queryString, host, port);
- wr.write(queryString + "\r\n");
- wr.flush();
- rd = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
- while ((line = rd.readLine()) != null) {
- response.append(line);
- }
- } catch (UnknownHostException e) {
- log.error(e);
- throw new IOException(e);
- } finally {
- IOUtils.closeQuietly(wr);
- IOUtils.closeQuietly(rd);
- if (serverSocket != null) {
- serverSocket.close();
- }
- }
- log.warn("finish request: ", queryString);
- return response.toString();
- }
- }
3. 执行脚本
- public class ScriptTest {
- public static void execute(String path , String script, String param) throws IOException, InterruptedException{
- if(...){
- SocketTransport st = new SocketTransport();
- String msg = st.query("127.0.0.1", 4445, "java -version");
- System.out.println(msg);
- else{
- Process p = Runtime.getRuntime().exec(path + script + params);
- System.out.println("Executing for "+type+": " + path + script + params);
- p.waitFor();
- p.destroy();
- }
- }
- }
0 0
- java调用Shell脚本
- java调用Shell脚本
- JAVA 调用shell脚本
- Java 调用Shell脚本
- shell脚本调用java
- Java调用shell脚本
- JAVA调用脚本
- JAVA调用Shell脚本
- java调用linux脚本
- java调用Shell脚本
- java调用脚本
- java调用shell脚本
- Java调用Python脚本
- java调用linux脚本
- Java调用Shell脚本
- Java调用Python脚本
- Java调用Shell脚本
- java调用python脚本
- fw_printenv 配置文件 nand flash
- hdu4268贪心
- jqgrid 去除 clear Search Value 按钮
- Intro to Java Programming, 6E - FigurePanel.java
- CString.Format的详细用法(转)
- java调用脚本
- PadDesigner中添加自己创建的热风焊盘Flash
- How to get current full screen dimention and orientation in run time
- 数据库自我快速学习笔记
- 动态链接库和静态链接库的区别
- Eclipse快捷键大全(转载)
- Android之Adapter用法总结
- Python datetime strptime 格式化字符串为 datetime 对象
- 访问WEB-INF下的JSP (转载)