2010-11-05 16 views
40

के लिए बनाई गई एक नई लाइन के साथ प्रिंट की आउटपुट को आसानी से रीडायरेक्ट करने के लिए कैसे करें मैंने Google के साथ खोज की है, प्रवाह पर ढेर और मेरे पायथन उपयोगकर्ता मार्गदर्शिका और प्रश्न के लिए एक सरल, व्यावहारिक उत्तर नहीं मिला है, "मैं एक प्रिंट को एक .txt पर रीडायरेक्ट कैसे करूं" फ़ाइलपायथन प्रत्येक रीडायरेक्ट

मैंने सी में एक फ़ाइल बनाई: w7x64 मशीन पर goat.txt नाम दिया और फ़ाइल में "परीक्षण" मुद्रित करने का प्रयास कर रहा हूं।

और स्टैक ओवरव्लो में दिए गए निम्नलिखित आधारित अपॉन्स उदाहरणों का प्रयास किया है। इस बिंदु पर मैं लॉग मॉड्यूल का उपयोग नहीं करना चाहता क्योंकि मैं बाइनरी स्थिति के आधार पर एक साधारण लॉग बनाने के लिए प्रलेखन से नहीं समझता। प्रिंट सरल है हालांकि परिणामों को पुनर्निर्देशित करना स्वयं स्पष्ट नहीं है। मैंने बिना किसी परिणाम के घंटों की खोज की है।

एक साधारण स्पष्ट उदाहरण है कि मैं अपने इंटरपरेटर में प्रवेश कर सकता हूं सबसे उपयोगी है।

इसके अलावा, सूचनात्मक साइटों के लिए किसी भी सुझाव की सराहना की जाती है (नहीं, pydocs, जो मुझे प्वेर्टो एस्कॉन्डीडो लाइनअप पर एक कुक सर्फर ले रहा है और "जब पैडल" कब पूछा जाता है तो "लहर को देखो" का जवाब देना)।

#import sys 
#print('test', file=open('C:\\goat.txt', 'w')) fails 
#print(arg, file=open('fname', 'w')) above based upon this 
#print>>destination, arg 

#print>> C:\\goat.txt, "test" Fails based upon the above 
+3

क्यों सभी लाइनों टिप्पणी कर रहे हैं? वे सभी "#" से क्यों शुरू होते हैं? –

+0

"विफल रहता है"? क्या होता है? –

+2

इसके अलावा, आप किस ट्यूटोरियल का उपयोग कर रहे हैं? "बिना किसी परिणाम के घंटों की खोज की गई" को "घंटों के लिए ट्यूटोरियल" द्वारा प्रतिस्थापित किया जाना चाहिए। क्या आपने कोई ट्यूटोरियल खोल दिया है? यदि हां, तो कौन सा? –

उत्तर

89

आप अजगर 2.5 या इससे पहले, फ़ाइल को खोलने और फिर अपने पुनर्निर्देशन में फ़ाइल ऑब्जेक्ट का उपयोग कर रहे हैं तो:

log = open("c:\\goat.txt", "w") 
print >>log, "test" 

आप अजगर 2.6 या 2.7 पर हैं, तो आप उपयोग कर सकते हैं एक समारोह के रूप में प्रिंट करें:

from __future__ import print_function 
log = open("c:\\goat.txt", "w") 
print("test", file = log) 

यदि आप पाइथन 3.0 या बाद में हैं, तो आप भविष्य के आयात को छोड़ सकते हैं। sys.stdout

आप अपने प्रिंट बयान अनुप्रेषित विश्व स्तर पर करना चाहते हैं, तो आप सेट कर सकते हैं:

import sys 
sys.stdout = open("c:\\goat.txt", "w") 
print ("test sys.stdout") 
+1

इस प्रिंट फ़ंक्शन को आयात करने से मेरे अन्य प्रिंट स्टेटमेंट त्रुटिपूर्ण हो जाते हैं। प्रिंट करें "एलएफडी शुरू करना ..." ^ सिंटेक्स त्रुटि: अमान्य वाक्यविन्यास – BenB

+3

@ बेनब्लूमर: यह एक अच्छा बिंदु है; आपको केवल उस फ़ाइल में प्रिंट फ़ंक्शन का भविष्य आयात करना चाहिए जहां आप अपने सभी प्रिंट स्टेटमेंट को फ़ंक्शन कॉल में कनवर्ट करना चाहते हैं। –

+4

stdout पर रीसेट करने के लिए, कोड का उपयोग करें: 'sys.stdout = sys .__ stdout__' –

37

सभी प्रिंट के लिए उत्पादन अनुप्रेषित करने के लिए, आप यह कर सकते हैं:

import sys 
with open('c:\\goat.txt', 'w') as f: 
    sys.stdout = f 
    print "test" 
+20

बाद में आप मूल स्थिति में stdout को सेट कर सकते हैं:' sys.stdout = sys .__ stdout__' – user673592

+0

यह अन्य .py फ़ाइलों में प्रिंट कॉल के लिए भी काम करता है – Matthias

+1

"sys.stdout' को इसके डिफ़ॉल्ट मान को फिर से निर्दिष्ट करने के लिए बेहतर है http://stackoverflow.com/a/7152903/1054978 – Mourya

-1

पुनर्निर्देशन sys.stdout एक खुली फ़ाइल हैंडल के लिए और फिर सभी मुद्रित आउटपुट फ़ाइल में जाता है:

import sys 
filename = open("outputfile",'w') 
sys.stdout = filename 
print "Anything printed will go to the output file" 
+2

जब मैं" sys.stdout = filename "चलाता हूं, तो प्रोग्राम फ्रीज होता है, यह सुनिश्चित नहीं करता कि क्या है गलत हो रहा। –

+0

शायद किसी संदर्भ के बजाय बफर के पॉइंटर को stdout असाइन किया जाना चाहिए। – dopatraman

+0

sys.stdout को पुन: असाइन करने का प्रयास न करें यदि आप इंटरैक्टिव रूप से पाइथन दुभाषिया में टाइप कर रहे हैं, क्योंकि अब आप दुभाषिया से कोई आउटपुट नहीं देख पाएंगे। क्योंकि यह stdout का उपयोग करता है। इसके अलावा - आप जिस भी शाखा पर बैठे हैं उसे न देखें। :-) – BobDoolittle

12

एक थोड़ा हैकर तरीका (जो ऊपर दिए गए उत्तरों से अलग है, जो सभी वैध हैं) केवल कंसोल के माध्यम से आउटपुट को फ़ाइल में निर्देशित करना होगा।

तो कल्पना करें कि आप main.py

if True: 
    print "hello world" 
else: 
    print "goodbye world" 

था आप

python main.py >> text.log 

कर सकते हैं और फिर text.log उत्पादन के सभी मिल जाएगा।

यह आसान है अगर आपके पास पहले से ही प्रिंट स्टेटमेंट का समूह है और व्यक्तिगत रूप से उन्हें किसी विशिष्ट फ़ाइल पर प्रिंट करने के लिए नहीं बदलना चाहते हैं। बस इसे ऊपरी स्तर पर करें और सभी प्रिंटों को एक फ़ाइल में निर्देशित करें (केवल दोष यह है कि आप केवल एक ही गंतव्य पर प्रिंट कर सकते हैं)।

0

Usinge print समारोह में file तर्क, आप प्रिंट प्रति अलग फ़ाइलों हो सकता है:

print('Redirect output to file', file=open('/tmp/example.log', 'w')) 
संबंधित मुद्दे