2012-09-20 18 views
5

मैं अपनी groovy स्क्रिप्ट से खोल कमांड निष्पादित करना चाहता हूँ। मैं निम्नलिखित परीक्षण किया:सही ढंग से groovy से खोल कमांड को कैसे कॉल करें

"mkdir testdir".execute() 

और यह सिर्फ ठीक काम करता है। अब मैं एक फाइल बनाना चाहता था, फ़ाइल में कुछ लिखना चाहता था और फिर फ़ाइल देखने के लिए एक टेक्स्ट एडिटर खोलना चाहता था।

def execute(cmd) { 
    def proc = cmd.execute() 
    proc.waitFor() 
} 

execute("touch file") 
execute("echo hello > file") 
execute("gedit file") 

अब जीएडिट सही तरीके से खुलता है लेकिन फ़ाइल में कोई "हैलो" स्ट्रिंग नहीं है। यह कैसे काम कर रहा है?!

उत्तर

4

आप लाइन में पुनर्निर्देशन ऐसा नहीं कर सकते:

execute("echo hello > file") 

तो कुछ भी नहीं फाइल करने के लिए लिखा जाता है। इसे संभालने का सबसे आसान तरीका शायद आपके सभी आदेशों को एक एकल स्क्रिप्ट स्क्रिप्ट में लपेटना है, फिर इस स्क्रिप्ट को निष्पादित करें।

अन्यथा, आप (> file के बिना) echo आदेश से मानक आउटपुट पढ़ सकते हैं, और उसके बाद ग्रूवी में अपने आप को file को यह लिखना।

या आप कर सकते हैं:

execute([ 'bash', '-c', 'echo hello > file' ]) 

जो आपके execute पद्धति के रूप में काम करना चाहिए बस the List.execute() method

+1

मैं 'groovy' बारे में कुछ भी पता नहीं है प्रदर्शन करेंगे; उस ने कहा, क्या निष्पादन से पहले प्रसंस्करण के लिए कमांड लाइन को पास करने के लिए 'निष्पादन विधि' को बताने का कोई तरीका है, जैसे कि पायथन 'सबप्रोसेस' मॉड्यूल के लिए 'shell = True' विकल्प'? – chepner

+1

@chepner असल में, आप सही हैं ... एक तरीका है ... उत्तर में जोड़ा गया –

+0

धन्यवाद! यह ठीक काम करता है :) * जवाब स्वीकार * – Moonlit

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

  • कोई संबंधित समस्या नहीं^_^