2013-06-12 15 views
5

के साथ एकाधिक पैरामीटर पास करें, मैं एक प्रक्रिया बिल्डर और पैरामीटर को एक स्पेस से अलग करने के लिए कई पैरामीटर पास करना चाहता हूं।प्रोसेसबिल्डर को एक स्पेस

यहाँ आदेश,

String[] command_ary = {dir+"library/crc"," -s ", fileName," ",addressRanges}; 

मैं "फ़ाइल नाम" और "addressRange" के बीच "fcrc" के बाद और "-p" के बाद और में एक जगह उपलब्ध कराने की जरूरत है।

धन्यवाद

+0

आप एक अच्छा काम किया था – darijan

उत्तर

18

आपको रिक्त स्थान शामिल करने की आवश्यकता नहीं है। Processbuilder आपके लिए इसके साथ सौदा करेगा। बस एक करके अपने तर्क में पारित, अंतरिक्ष के बिना:

ProcessBuilder pb = new ProcessBuilder(
         dir + "library/crc", 
         "-s", 
         fileName, 
         addressRanges); 
+0

हां सही thats लेकिन सीआरसी exe जो का उपयोग कर इम और सीआरसी और -s के बीच फ़ाइल नाम और पते के बीच की जगह की आवश्यकता है श्रेणियां पारित की गईं, अन्यथा यह फ़ाइल को फेंकता नहीं मिला अपवाद – mee

+3

@mee क्या आप वाकई "फ़ाइल नहीं मिली" त्रुटि किसी और चीज के कारण नहीं है? यदि आप 'fileName' के रूप में एक सापेक्ष पथ का उपयोग कर रहे हैं तो आपको संभवतः प्रक्रिया के लिए सही कार्यशील निर्देशिका सेट करने की आवश्यकता होगी ('pb.startory (...)' का उपयोग करके 'pb.start()' 'को कॉल करने से पहले) –

10

हम क्योंकि कमांडलाइन पता करने के लिए जो पहला तर्क है, जो दूसरे और इतने पर है की जरूरत है कमांडलाइन में बहस के बीच रिक्त स्थान की जरूरत है। हालांकि जब हम ProcessBuilder का उपयोग करते हैं, तो हम इसे एक सरणी पास कर सकते हैं, इसलिए हमें तर्कों को अलग करने के लिए उन रिक्त स्थान को जोड़ने की आवश्यकता नहीं है। कुछ जांच के बाद ProcessBuilder सीधे कमांड सरणी को exec पर पास कर देगा। उदाहरण के लिए,

private static final String JAVA_CMD = "java"; 
private static final String CP = "-cp"; 

private static final String CLASS_PATH = "../bin"; 
private static final String PROG = "yr12.m07.b.Test"; 
private static final String[] CMD_ARRAY = { JAVA_CMD, CP, CLASS_PATH, PROG }; 
ProcessBuilder processBuilder = new ProcessBuilder(CMD_ARRAY); 

उपरोक्त कोड पूरी तरह से काम करेगा।

इसके अलावा, आप

Runtime.getRuntime().exec("java -cp C:/testt Test"); 

उपयोग कर सकते हैं लेकिन यह अधिक ProcessBuilder उपयोग करने के लिए सुविधाजनक है, एक कारण यह है कि हमारे तर्क स्थान शामिल हैं अगर हम java -cp C:/testt \"argument with space\" तरह Runtime.getRuntime().exec() में बोली उत्तीर्ण करने की आवश्यकता है, लेकिन ProcessBuilder के साथ हम प्राप्त कर सकते हैं इससे छुटकारा पाना।

ProcessBuilder processBuilder = new ProcessBuilder("command", "The first argument", "TheSecondWithoutSpace"); 
-2

इस तरह यह प्रयोग करें:

new java.lang.ProcessBuilder('netstat -an'.toString().split('\\s'))).start()

+0

इसे 'toString() ' – aDoN

+0

के साथ भी काम करना चाहिए' '' जावा में '' 'का प्रयोग एक अक्षर के लिए किया जाता है, स्ट्रिंग – Dici

+0

मुझे वोट क्यों प्राप्त नहीं हुआ, हेक? आपने जेएसपी webshell का उपयोग 1 पैरामीटर के साथ नहीं किया है, ऐसा लगता है, उस 'सीएमडी_एआरआरएई' का उपयोग करें, अब मुझे बताएं, क्या आप कमांड के आधार पर कई पैरामीटर पारित करने जा रहे हैं? मुझे हंसी मत बनाओ ...... मुझे ये वोट मिले हैं ओएमजी के चारों ओर एक और तरीका होना चाहिए! – aDoN

संबंधित मुद्दे