2013-07-23 6 views
7

इस नमूना पायथन कोड पर विचार करें। यह stdin से पढ़ता है और एक फाइल लिखता है।क्या Python में sys.stdout के लिए उपनाम होना संभव है?

import sys 

arg1 = sys.argv[1] 

f = open(arg1,'w') 
f.write('<html><head><title></title></head><body>') 

for line in sys.stdin: 
    f.write("<p>") 
    f.write(line) 
    f.write("</p>") 

f.write("</body></html>") 
f.close() 

मान लीजिए कि मैं इस प्रोग्राम को इसके बजाय stdout लिखने के लिए संशोधित करना चाहता हूं। फिर, मुझे f.write() के प्रत्येक उदाहरण को sys.stdout.write() के साथ प्रतिस्थापित करना होगा। लेकिन वह बहुत कठिन होगा। मैं जानना चाहता हूं कि f को sys.stdout के लिए उपनाम के रूप में निर्दिष्ट करने का कोई तरीका है, ताकि f.write() को sys.stdout.write() माना जा सके।

+4

'f = sys.stdout' के बारे में कैसे? –

+1

@AdamRosenfield, अगर यह काम करता है, तो कृपया इसे उत्तर दें! मैं पाइथन नौसिखिया हूँ। – CodeBlue

+0

@CodeBlue आप हमें बताते हैं – Stephan

उत्तर

11

बस

>>> import sys 
>>> f = sys.stdout 
>>> f.write('abc') 
abc 

अब तुम सिर्फ f = sys.stdout बजाय f = open(fileName) करने की आवश्यकता है। (और f.close() हटाएं)

भी, कृपया फ़ाइलों के लिए निम्न वाक्यविन्यास का उपयोग करने पर विचार करें।

with open(fileName, 'r') as f: 
    # Do Something 

फ़ाइल आपके लिए स्वचालित रूप से बंद हो जाती है।

3

हाँ, अजगर में, आप हर वर्ग/समारोह/विधि उर्फ ​​आदि बस मूल्य यदि आप किसी अन्य चर करने के लिए उपयोग करना चाहते हैं निर्दिष्ट कर सकते हैं:

import sys 
f = sys.stdout 

अब हर विधि आप f पर कॉल पर बुलाया जाएगा sys.stdout। आप जो भी चाहें उसके साथ कर सकते हैं, उदाहरण के लिए i = sys.stdin आदि

+0

'in = sys.stdin' को छोड़कर, क्योंकि 'सिंटेक्स त्रुटि: अमान्य वाक्यविन्यास' – Eric

+0

@Eric: क्षमा करें, एक कीवर्ड होने के बारे में भूल गए – pascalhein

14

पायथन में नाम केवल बाइंडिंग हैं। इसलिए:

f = sys.stdout 

बस वस्तु कि भी sys.stdout को बाध्य है के नाम f बांधता है ...

ध्यान दें कि जब से वे दोनों एक ही वस्तु हो, कोई भी परिवर्तन करने के लिए कर f या sys.stdout इस बिंदु पर दोनों को प्रभावित करेगा ... तो f.close() ऐसा नहीं करते हैं, जैसा कि आप सामान्य रूप से sys.stdout.close() नहीं करना चाहता होगा ...

+1

आप (अधिक) अधिक स्केची' sys.stdout भी कर सकते हैं = खुला ('some_file.txt', 'w'); ' –

0

वैसे भी यह एक खोल का सही ढंग से काम है; जब आप स्क्रिप्ट का आह्वान करते हैं तो इसे मानक आउट पर भेजें और इसे >filename का उपयोग करके फ़ाइल में रीडायरेक्ट करें।

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