मैं (सत्यापन स्क्रिप्ट निष्पादित करता है) बिना किसी समस्या के कमांड लाइन से इस आदेश को चला सकते हैं:जावा 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
और जावा से अगर मैं URL पैरामीटर को बंद रखना होगा और बस कार्य करें:
String[] args1 = {"c:/Python27/python", "../feedvalidator/feedvalidator/src/demo.py" };
Runtime r = Runtime.getRuntime();
Process p = r.exec(args1);
यह ठीक काम करता है। यदि मैं पैरामीटर के लिए कुछ यूआरएल का उपयोग करता हूं जैसे:
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"};
यह भी ठीक काम करता है।
लेकिन अगर मैं इस विशेष यूआरएल https://das.dynalias.org:8080/das_core/das/2.16.840.1.113883.4.349/1012581676V377802/otherAdminData/careCoordinators का उपयोग करता हूं, तो स्क्रिप्ट बस लटकती है (जावा प्रक्रिया समाप्त होने की प्रतीक्षा करता है)। मुझे यकीन नहीं है कि यह उस यूआरएल के लिए कमांड लाइन से क्यों काम करता है लेकिन जावा प्रोग्राम से नहीं। मैंने URL पैरामीटर को घेरने के लिए उद्धरण जोड़ने का प्रयास किया लेकिन यह भी काम नहीं करता था। मुझे यूआरएल में कोई भी चरित्र नहीं दिख रहा है जो मुझे लगता है कि बचने की जरूरत है।
पूर्ण कोड:
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!");
}
}
शायद वर्तमान निर्देशिका कोई फर्क पड़ता है? आप कमांड लाइन में दूसरी निर्देशिका में स्विच करने का प्रयास कर सकते हैं। – Yogu
आपको जावा से निष्पादित वास्तविक कमांड लाइन की जांच करनी चाहिए, लिनक्स पर - 'ps f', Win-sysinternals ProcessExplorer –
पर यह कुछ एसएसएल समस्या हो सकती है। क्या आप इसे सत्यापित करने के लिए http endpoint को कॉल करने का प्रयास कर सकते हैं? – phoet