2011-01-10 7 views
5

के माध्यम से चल रही स्क्रिप्ट्स मैं एक जावा प्रोग्राम से पाइथन, रूबी, सी, सी ++, और जावा स्क्रिप्ट चलाने की कोशिश कर रहा हूं, और स्क्रिप्ट चलाने के लिए प्रोसेसबिल्डर को मुझे एक अच्छा तरीका बताया गया था। जो मैं समझता हूं, प्रोसेसबिल्डर ज्यादातर देशी फाइलें चलाता है (विंडोज़ पर .exe, आदि)। हालांकि, मैंने Processbuilder का उपयोग कर स्क्रिप्ट (nonnative) फ़ाइलों को चलाने के बारे में कुछ बातें सुनी हैं। दुर्भाग्यवश, इस विषय पर जो कुछ भी मुझे मिलता है वह अविश्वसनीय रूप से अस्पष्ट है।प्रक्रियाबिल्डर

यदि कोई पाइथन, रूबी इत्यादि जैसी गैर-स्क्रिप्ट स्क्रिप्ट चलाने के लिए कोई तरीका स्पष्ट कर सकता है तो मैं सबसे आभारी हूं!

उत्तर

6

आप ProcessBuilder documentation over at Sunoracle देख सकते हैं, लेकिन मूल रूप से, आप स्क्रिप्टिंग भाषा के लिए दुभाषिया चला सकते हैं और उस स्क्रिप्ट को पास कर सकते हैं जिसे आप इसे चलाने के लिए चाहते हैं।

उदाहरण के लिए, मान लीजिए कि आप /home/myuser/py_script.py में एक स्क्रिप्ट है, और python/usr/bin/

class ProcessRunner 
{ 
    public static void main(String [] args) 
    { 
     ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", "/home/myuser/py_script.py"); 
     Process p = pb.start(); 
    } 
} 

एक बेहद बुनियादी उदाहरण में, आप काम कर निर्देशिका को परिवर्तित करने के साथ अधिक सजावटी हो और पर्यावरण बदल सकता है।

आप ProcessBuilder को String सरणी या List<String> के उप-प्रकार के साथ भी बना सकते हैं। सूची में पहला आइटम प्रोग्राम/निष्पादन योग्य होना चाहिए जिसे आप चलाना चाहते हैं, और निम्न सभी आइटम प्रोग्राम के लिए तर्क हैं।

String pbCommand[] = { "/usr/bin/python", "/home/myuser/py_script.py" }; 
ProcessBuilder pb = new ProcessBuilder(pbCommand); 
Process p = pb.start(); 
+0

यह काम करता है! आपका बहुत बहुत धन्यवाद! – Curlystraw

0

मैन्युअल स्क्रिप्ट है, जो भी पोर्टेबिलिटी मुद्दों में हो सकता है की पूरी स्थान में प्रवेश करने से बचने के लिए, यहाँ मैं क्या किया है:

String pwd = System.getProperty("user.dir"); 

ProcessBuilder pb = new ProcessBuilder("/usr/bin/python", pwd+'/'+scriptName, arg1, arg2); 
Process p = pb.start();