2011-04-03 10 views
5

मेरे पास "सी: \ दस्तावेज़ और सेटिंग्स \ test.exe" निर्देशिका में स्थित एक फ़ाइल है, लेकिन जब मैं एकल qoutes में `C:\Documents and Settings\test.exe कमांड लिखता हूं (जिसे मैं इस बॉक्स में प्रदर्शित नहीं कर पा रहा हूं), आदेशों को निष्पादित करने के लिए उपयोग किया जाता है रुबी में, मैं ऐसा करने में सक्षम नहीं हूं और जो त्रुटि मैं प्राप्त करता हूं वह कोई फ़ाइल या निर्देशिका नहीं मिली है। मैंने "//" और "\" के साथ "\" को बदलने की कोशिश की है लेकिन कुछ भी काम नहीं करता है। मैंने सिस्टम, IO.popen और exec कमांड का भी उपयोग किया है लेकिन सभी प्रयास व्यर्थ हैं। इसके अलावा निष्पादन आदेश प्रोग्राम को बाहर निकलने के लिए बनाता है जिसे मैं नहीं करना चाहता हूं।रूबी में विंडोज सीएलआई कमांड कैसे निष्पादित करें?

अग्रिम धन्यवाद।

+0

मैं तुम्हें सेम संभालने हूँ "एकल उद्धरण" के बदले "बैकटिक" है, लेकिन मैं अपने प्रश्न संपादित करने के लिए जब तक आप उस बात की पुष्टि नहीं जा रहा हूँ। – davetron5000

उत्तर

4
`"C:\Documents and Settings\test.exe"` 

या

`exec "C:\Documents and Settings\test.exe"` 

या जो कुछ भी qoutes

+0

मुख्य विचार उद्धरणों में पथ को लपेटना है। मैं विंडोज से परिचित नहीं हूं इसलिए कोई अन्य प्रतिबंध हो सकता है। – fl00r

+0

पता नहीं है कि जिस फ़ाइल के साथ मैं काम कर रहा हूं, उसमें रूबी प्रोग्राम में काम करने के लिए कुछ बाधाएं हैं या जिस तरह से मैं फ़ाइल का पथ निर्दिष्ट कर रहा हूं वह गलत है लेकिन यह बात मेरे लिए काम नहीं कर रही है ... लेकिन यह तरीका है कि आप कहा सही है !!! –

+0

तो ... सबकुछ काम करता है? – fl00r

7

बैकटिक पर्यावरण डबल उद्धरण की तरह है, इसलिए बैकस्लैश में से बचने के लिए किया जाता है। इसके अलावा, रूबी कमांड लाइन तर्क को अलग करने के रूप में रिक्त स्थान की व्याख्या करेगा, तो आप पूरी बात को उद्धृत करने की जरूरत है:

`"C:\\Documents and Settings\\test.exe"` 

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

system('C:\Documents and Settings\test.exe','') 

नोट एकल उद्धरण के उपयोग, इसलिए हम बैकस्लाश से बचें नहीं।

बेशक

, यह आप बाहर मानक/त्रुटि, इसलिए यदि आप रूबी 1.9.2 पर हैं, तो आप अद्भुत रूप में काम Open3 पुस्तकालय, जो system तरह काम करता है का उपयोग कर सकते नहीं मिलेगा, लेकिन आप के बारे में अधिक जानकारी देता है प्रक्रिया तुम सिर्फ भाग गया:

require 'open3' 

stdout,stderr,status = Open3.capture3('C:\Documents and Settings\test.exe','') 

puts stdout # => string containing standard output of your command 
puts stderr # => string containing standard ERROR of your command 
if status.success? 
    puts "It worked!" 
else 
    puts "OH NOES! Got exit code #{status.exitstatus}" 
end 
+0

ओपन 3 के लिए अपरिभाषित विधि 'कैप्चर 3': रूबी 1.8.7 के साथ मॉड्यूल (NoMethodError) – stack1

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