私は、pythonライブラリでグラフを生成するgenerate_graphs.pyと呼ばれるpythonスクリプトを持っています。グラフは、内部データを使用して顧客に示す傾向です。Javaで複数のpythonスクリプトを実行しようとしています
私はJavaからスクリプトを実行しようとしていますが、実行中のエビデンスは表示されません。それが実行されたことを示すログの証拠はありませんが、これはスクリプト自体が実行されていないか、execメソッドの実装であるかどうかはわかりません。
スクリプトは、プロセスの一部としてデータをデータベースに挿入し、何も挿入されません。ただし、コマンドラインからスクリプトコマンドを個別に実行すると、スクリプトは正常に動作します。ここで
がmkyong.comから使用し、実行コマンドの実装です:
/**
* Runs a command to execute the generate_graph python script
*
* @param server_id
*/
public void generateGraph(List<String> list_name, String server_id, String email_addr, String report_str) {
String generate_graph_cmd = "python2.7 generate_graphs.py --l '%s' --server_name '%s' --email_addr '%s' --report_string '%s' --debug";
//We want to remove the lm_ part from the server name
String server_name = server_id.split("_")[1].replace("\'", "");
String list_name_str = "";
for (String name : list_name){
list_name_str += name + ",";
}
//We want to remove the trailing comma left by the above loop
if (list_name_str.length() > 1){
list_name_str = list_name_str.substring(0, list_name_str.length() - 1);
}
generate_graph_cmd = String.format(generate_graph_cmd, list_name_str, server_name, email_addr, report_str);
try {
System.out.println("[Py Output] " + executeCommand(generate_graph_cmd));
} catch (Exception e) {
e.printStackTrace();
}
log.debug("Generating graph with the following parameters:\nserver_id: " + server_id + "\nlist_id: " + list_name.toString());
}
私だけを参照してください。
private String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
ここで大体一回3秒ごとに、合計で約40倍と呼ばれる方法がありますログ内の出力の部分はlog.debug
です。私はそれをあまりにも早く/間違って呼んでいますか?どんな助けもありがとう、ありがとう!
1. Javaコード規約では、camelCase(snake_caseではなく)を使用しています。 2.より良い方法は、['ProcessBuilder'](https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html)を使用することです。 – alfasin