मैं रूबी स्क्रिप्ट के लिए फ़ाइल करने के लिए stderr और stdout को पुनर्निर्देशित कैसे करूं?रूबी स्क्रिप्ट के लिए फ़ाइल करने के लिए मैं stderr और stdout को रीडायरेक्ट कैसे करूं?
उत्तर
./yourscript.rb 2>&1 > log.txt
एक ही फ़ाइल में stdout और stderr को पुनर्निर्देशित करेगा।
मान लिया जाये कि आप * nix पर चल रहे हैं –
@Steve: मुझे लगता है कि '>' विंडोज़ पर काम करता है - मुझे यकीन है कि '2>' के बारे में निश्चित नहीं है। –
यह विंडोज़ पर भी काम करेगा। – gthomaslynch
से, आप stdout
और stderr
IO#reopen
विधि के साथ अनुप्रेषित कर सकते हैं।
# a.rb
$stdout.reopen("out.txt", "w")
$stderr.reopen("err.txt", "w")
puts 'normal output'
warn 'something to stderr'
$ ls a.rb $ ruby a.rb $ ls a.rb err.txt out.txt $ cat err.txt something to stderr $ cat out.txt normal output
सामान्य $ stdout फिर से कैसे बहाल किया जा सकता है? – shevy
हमें फिर से विधि का उपयोग क्यों करना चाहिए? इसका मतलब यह है कि अगर "out.txt" मौजूद नहीं है, तो यह बनाया जाएगा? – wind
बाद में $ stdout को पुनर्स्थापित करने के तरीके पर [इस उत्तर] (http://stackoverflow.com/a/22777806/1287376) पर एक नज़र डालें। –
नोट:/dev/बातिल करने के लिए मानक धाराओं के दोबारा खुलने एक प्रक्रिया की मदद करने के लिए एक डेमॉन बनने के लिए की एक अच्छी पुराना तरीका है। उदाहरण के लिए:
# daemon.rb
$stdout.reopen("/dev/null", "w")
$stderr.reopen("/dev/null", "w")
"प्रक्रिया को एक डिमन बनने में मदद करना" का क्या मतलब है? – silvamerica
यूनिक्स में प्रोग्राम को एक डिमन बनाने के लिए प्रोग्रामर को इसे पृष्ठभूमि में केवल फोर्क नहीं करना चाहिए बल्कि इसकी मानक आईओ धाराओं को भी पुनर्निर्देशित करना चाहिए। क्या आप इससे परिचित हैं? –
नोट: यदि अंतर्निहित 'Process.daemon' का उपयोग करना है तो यह आपके लिए यह कर सकता है। [यहां दस्तावेज़] देखें [http://ruby-doc.org/core-2.2.2/Process.html#method-c-daemon)। – captainpete
def silence_stdout
$stdout = File.new('/dev/null', 'w')
yield
ensure
$stdout = STDOUT
end
अच्छा, लेकिन यह बेहतर है, अगर एसटीडीओटी कुछ और था। http://stackoverflow.com/a/4459463/26604 –
संबंधित प्रश्न: http://stackoverflow.com/questions/4459330/how-do-i-temporarily-redirect-stderr-in-ruby –