/* This file is part of VoltDB. * Copyright (C) 2008-2017 VoltDB Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with VoltDB. If not, see <http://www.gnu.org/licenses/>. */ package org.voltdb.processtools; import java.io.BufferedInputStream; import java.io.IOException; import org.voltcore.logging.VoltLogger; public abstract class ShellTools { private static VoltLogger log = new VoltLogger("HOST"); private static Process createProcess(String command[]) { ProcessBuilder pb = new ProcessBuilder(command); pb.redirectErrorStream(true); Process p = null; try { p = pb.start(); } catch (IOException e) { StringBuilder sb = new StringBuilder(); if (command != null) { for (String c : command) { sb.append(c).append(" "); } } log.error("Failed to run command " + sb.toString() + ". Error is " + e.getMessage()); return null; } return p; } public static String local_cmd(String command) { return local_cmd(command.split(" ")); } public static String local_cmd(String[] command) { StringBuilder retval = new StringBuilder(); Process p = createProcess(command); if (p == null) { return null; } BufferedInputStream in = new BufferedInputStream(p.getInputStream()); int c; try { while((c = in.read()) != -1) { retval.append((char)c); } } catch (Exception e) { p.destroy(); } try { p.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } p.destroy(); return retval.toString(); } }