tôi có thể chạy lệnh này từ dòng lệnh mà không cần bất kỳ vấn đề (kịch bản xác nhận thực hiện):Java Runtime.exec()
c:/Python27/python ../feedvalidator/feedvalidator/src/demo.py https://das.dynalias.org:8080/das_core/das/2.16.840.1.113883.4.349/1012581676V377802/otherAdminData/careCoordinators
và từ java nếu tôi rời khỏi tham số URL và chỉ cần làm:
String[] args1 = {"c:/Python27/python", "../feedvalidator/feedvalidator/src/demo.py" };
Runtime r = Runtime.getRuntime();
Process p = r.exec(args1);
hoạt động tốt. Nếu tôi sử dụng các URL nhất định cho thông số như:
String[] args1 = {"c:/Python27/python", "../feedvalidator/feedvalidator/src/demo.py" , "http://www.intertwingly.net/blog/index.atom"};
// or
String[] args1 = {"c:/Python27/python", "../feedvalidator/feedvalidator/src/demo.py" , "http://www.cnn.com"};
nó cũng hoạt động tốt.
Nhưng nếu tôi sử dụng URL cụ thể này https://das.dynalias.org:8080/das_core/das/2.16.840.1.113883.4.349/1012581676V377802/otherAdminData/careCoordinators thì tập lệnh chỉ bị treo (java chờ quá trình kết thúc). Tôi không chắc chắn lý do tại sao nó hoạt động từ dòng lệnh cho URL đó nhưng không phải từ một chương trình java. Tôi đã thử thêm dấu ngoặc kép để bao quanh thông số URL nhưng điều đó cũng không hoạt động. Tôi không thấy bất kỳ ký tự nào trong URL mà tôi cho rằng cần phải được thoát.
Full Code:
String urlToValidate = "https://das.dynalias.org:8080/das_core/das/2.16.840.1.113883.4.349/1012581676V377802/otherAdminData/careCoordinators";
String[] args1 = {"c:/Python27/python", "C:/Documents and Settings/vhaiswcaldej/DAS_Workspace/feedvalidator/feedvalidator/src/demo.py", urlToValidate };
System.out.println(args1[0] + " " + args1[1] + " " + args1[2]);
Runtime r = Runtime.getRuntime();
Process p = r.exec(args1);
BufferedReader br = new BufferedReader(new InputStreamReader(
p.getInputStream()));
int returnCode = p.waitFor();
System.out.println("Python Script or OS Return Code: " + Integer.toString(returnCode));
if (returnCode >= 2) {
.out.println("OS Error: Unable to Find File or other OS error.");
}
String line = "";
while (br.ready()) {
String str = br.readLine();
System.out.println(str);
if (str.startsWith("line")) {
//TODO: Report this error back to test tool.
//System.out.println("Error!");
}
}
Có thể thư mục hiện tại không quan trọng? Bạn có thể thử chuyển sang thư mục khác trong dòng lệnh. – Yogu
bạn nên kiểm tra dòng lệnh thực tế đang được thực hiện từ Java, trên Linux - 'ps f', trên Win - sysinternals ProcessExplorer –
điều này có thể là một số vấn đề ssl. bạn có thể thử gọi một điểm cuối http để xác minh nó không? – phoet