2010-06-10 14 views
17

का उपयोग कर विंडोज पर पाइथन स्क्रिप्ट चलाता हूं तो आउटपुट रीडायरेक्ट नहीं कर सकता है यह विंडोज 7 (64 बिट), पायथन 2.6 पर पाइथन के लिए Win32 एक्सटेंशन के साथ चल रहा है।जब मैं स्क्रिप्ट के नाम

मेरे पास एक साधारण स्क्रिप्ट है जो सिर्फ "हैलो वर्ल्ड" प्रिंट करती है। मैं इसे python hello.py के साथ लॉन्च कर सकता हूं। इस मामले में मैं आउटपुट को एक फ़ाइल में रीडायरेक्ट कर सकता हूं। लेकिन अगर मैं इसे कमांड लाइन पर hello.py टाइप करके और आउटपुट को रीडायरेक्ट करके चलाता हूं, तो मुझे अपवाद मिलता है।

C:> python hello.py 
hello world 

C:> python hello.py >output 

C:> type output 
hello world 

C:> hello.py 
hello world 

C:> hello.py >output 
close failed in file object destructor: 
Error in sys.excepthook: 

Original exception was: 

मुझे लगता है कि मुझे विंडोज 7 में अपग्रेड करने के बाद पहली बार यह त्रुटि मिलती है। मुझे याद है कि इसे XP में काम करना चाहिए। मैंने लोगों को इस बग python-Bugs-1012692 | Can't pipe input to a python program के बारे में बात करते हुए देखा है। लेकिन वह बहुत समय पहले था। और यह किसी भी समाधान का जिक्र नहीं करता है।

क्या किसी ने इसका अनुभव किया है? कोई भी मदद कर सकता है?

+1

देखते हैं कि आप दो आउटपुट स्ट्रीम देखते हैं कि बारे में पता है, तो: stdout और stderr? –

+0

हां। और मैं stdout आउटपुट को पुनर्निर्देशित करना चाहता हूं। –

उत्तर

16

क्या आप इसके बारे में पूछ रहे हैं?

विंडोज: जब (यानी "अजगर script.py" के बदले "script.py" शुरू) फ़ाइल प्रकार संघों का उपयोग कर कमांड लाइन पर अजगर स्क्रिप्ट का निष्पादन, रीडायरेक्ट जब तक आप एक विशिष्ट रजिस्ट्री सेट काम नहीं कर सकता कुंजी। नॉलेज बेस आलेख STDIN/STDOUT Redirection May Not Work If Started from a File Association देखें।

यह पायथन रीडमे में है। शायद यह पैच वह है जिसे आप ढूंढ रहे हैं।

+1

यही वह है। केवल InheritConsoleHandles रजिस्ट्री मान जोड़ना यह करता है! अनेक अनेक धन्यवाद!!! –

0

मुझे इस मुद्दे से अवगत नहीं है, लेकिन मुझे इसके आसपास काम करने का विचार है। क्या आपने आउटपुट कैप्चर करने वाली आउटपुट फ़ाइल निर्दिष्ट करने के लिए कमांड लाइन विकल्प (जैसे -o) जोड़ने के बारे में सोचा है?

+0

आपके सुझाव के लिए धन्यवाद। यह आखिरी उपाय के रूप में करेगा :) लेकिन यह मांग पर "आउटपुट" टाइप करने के जितना आसान नहीं है। इसके अलावा मेरे पास बहुत सारी स्क्रिप्ट हैं और उन सभी को बदलने के लिए व्यावहारिक नहीं है। –

8

UPDATED उत्तर

एक माइक्रोसॉफ्ट KB मुद्दा (STDIN/STDOUT Redirection May Not Work If Started from a File Association) वास्तव में इस मुद्दे को हो सकता है। पृष्ठ में Win2000 हॉटफिक्स डाउनलोड करने के निर्देश हैं, लेकिन शायद हाल के विंडोज संस्करणों पर इसकी आवश्यकता नहीं हो सकती है। हॉटफिक्स के बाद (या संभवतः इसके बिना, आपके विन संस्करण के आधार पर), मैन्युअल रजिस्ट्री संपादन की आवश्यकता है।

आपको प्रदान किए गए लिंक को देखना चाहिए; किसी भी मामले में, मैं यहाँ संक्षेप में प्रस्तुत:

  • ओपन रजिस्ट्री संपादक और पता लगाने कुंजी HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  • InheritConsoleHandles नामक एक DWORD मान जोड़ें और 1 पर सेट करें।

यह माना जाता है।

+0

मेरे पास पैथएक्सटी में है। इस तरह मैं आमतौर पर स्क्रिप्ट चलाता हूं। दुर्भाग्यवश मुझे .py एक्सटेंशन में प्रवेश किए बिना या बिना त्रुटि मिली। –

+0

@Wai: मेरे उत्तर के "नए और बेहतर" संस्करण की जांच करें, और यह बताएं कि यह आपके लिए काम करता है या नहीं। – tzot

+0

ओह। ऐसा नहीं देखा कि एसएलॉट पहले से ही एक ही लिंक प्रदान कर चुका था। क्षमा करें :) – tzot

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