java - 将 python 子进程转换为 Java 进程
问题描述
我需要通过 Java 执行 shell 命令,但是我的 Java 代码有问题。
实际上,我可以通过 java 运行 cmd。
整个命令行是“solc-0.4.25 --bin /Users/programmerc/Documents/Research_Data/Smart_Contract_Source_Code/SourceCode/0xb7b80925d8e86b787ff21f96112c588aa6bb32a9.sol | solc-0.4.25 --link --libraries /Users/programmerc/Documents/Researc :0x00000000000000000000000000000000000000001"
我的python代码很正常。代码是:
option = "--libraries /Users/programmerc/Documents/Researc:0x0000000000000000000000000000000000000001"
FNULL = open(os.devnull, 'w')
cmd = "solc-0.4.25 --bin-runtime %s" % filename
p1 = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=FNULL)
cmd = "solc-0.4.25 --link%s" %option
p2 = subprocess.Popen(shlex.split(cmd), stdin=p1.stdout, stdout=subprocess.PIPE, stderr=FNULL)
p1.stdout.close()
out = p2.communicate()[0].decode()
但是,我的 Java 代码有问题。我的Java代码是:
public static String runCMDWithTimeout(String cmd[]){
final ExecutorService exec = Executors.newFixedThreadPool(1);
String result = null;
Callable<String> call = new Callable<String>() {
public String call() throws Exception {
String result = "";
Process pro = Runtime.getRuntime().exec(cmd);
InputStream in = null;
in = pro.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while((line = reader.readLine()) != null)
result += line + "\n";
pro.destroy();
return result;
}
};
try {
Future<String> future = exec.submit(call);
result = future.get(1000 * 10, TimeUnit.MILLISECONDS);
} catch (TimeoutException e){
System.out.println(cmd[cmd.length-1] + " ===> time out");
} catch (Exception e) {
e.printStackTrace();
} finally {
exec.shutdown();
}
return result;
}
String str = "solc-0.4.25 --bin /Users/programmerc/Documents/Research_Data/Smart_Contract_Source_Code/SourceCode/0xb7b80925d8e86b787ff21f96112c588aa6bb32a9.sol | solc-0.4.25 --link --libraries /Users/programmerc/Documents/Researc:0x0000000000000000000000000000000000000001";
String output = Utils.runCMDWithTimeout(str.splite(" "));
我已经尝试了代码,但我什么也没返回。