2012-11-27 29 views
30

एक नया विंडोज सिस्टम स्थापित कर रहा है, मैं Cygwin और 64 बिट अजगर (2.7.3) उनके डिफ़ॉल्ट स्थानों में (c:\cygwin और c:\Python27\python) स्थापित किया है, और दोनों Cygwin बिन और कहा कि पाइथन निर्देशिका मेरे पथ (उपयोगकर्ता परिवर्तनीय पाथ में)। से सामान्य कमांड विंडो, पायथन पूरी तरह से शुरू होता है, लेकिन जब मैं इसे साइगविन पर्यावरण में bash से आमंत्रित करता हूं, तो यह कभी भी इनपुट इनपुट नहीं देता है।लागू अजगर लटकी हुई है

मैं एक decidely अमानक स्थान में अजगर (32 बिट) और Cygwin, की और अजगर साथ पुराने संस्करणों के साथ अन्य मशीनों पर ऐसा करने के बाद, पहले से है, लेकिन हमेशा। क्या किसी और के पास यह समस्या है, या कोई मुझे बता सकता है कि यह क्या हो सकता है?

उत्तर

28

समस्या यह है कि जिस तरह से सिग्विन टर्मिनल (मिनीटीटीई) व्यवहार करता है, मूल विंडोज़ पाइथन का निर्माण यह नहीं समझता कि stdout एक टर्मिनल डिवाइस है - ऐसा लगता है कि यह एक पाइप है, इसलिए यह गैर- इंटरैक्टिव मोड के बजाय इंटरैक्टिव मोड, और यह लाइन-बफरिंग के बजाए इसके आउटपुट को पूरी तरह से बफर करता है।

कारण यह है कि यह नया है क्योंकि आपकी पिछली सिगविन स्थापना में, आपके पास मिनीटीटीई नहीं थी, और टर्मिनल का उपयोग केवल मानक विंडोज टर्मिनल था।

इसे ठीक करने के लिए, आपको या तो नियमित विंडोज टर्मिनल (Cmd.exe) से पायथन चलाने की आवश्यकता है, या पाइथन के मूल विंडोज निर्माण के बजाय पायथन के सिग्विन संस्करण को स्थापित करने की आवश्यकता है। सिगविन संस्करण (सिगविन के setup.exe के माध्यम से पैकेज के रूप में स्थापित) सिग्विन टर्मिनल को समझता है और मिनीटीटी के माध्यम से चलाते समय उचित तरीके से कार्य करता है।

यदि आपके द्वारा पाइथन का विशेष संस्करण एक सिगविन पैकेज के रूप में उपलब्ध नहीं है, तो आप पाइथन के स्रोत कोड को भी डाउनलोड कर सकते हैं और इसे स्वयं सिगविन के तहत बना सकते हैं। यदि आपके पास पहले से कोई (जीसीसी) नहीं है, तो आपको एक सिग्विन कंपाइलर टूलचेन की आवश्यकता होगी, लेकिन फिर मुझे विश्वास है कि इसे मानक ./configure && make && make install कमांड के साथ संकलित करना चाहिए।

+1

+1 - विंडोज पायथन 27 से साइगविन पायथन 32 तक स्विचिंग ने इस समस्या को हल किया जो मैंने भी किया था। – mouviciel

+2

धन्यवाद। मैं पायथन का संस्करण नहीं बदल सकता (बिना 2 संस्करणों को स्थापित किए, एक सिगविन के लिए, एक और सब कुछ के लिए), क्योंकि यह हमारी उत्पादन निर्माण श्रृंखला का हिस्सा है। लेकिन 'पायथन -आई' काम करता है, और '.bashrc' में उपनाम बनाने का शायद एक स्वीकार्य समाधान है। –

+4

[यह उत्तर] (http://stackoverflow.com/a/9549255/9530) कुछ और सुझाव भी देता है जिनके बारे में मैं पहले अनजान था - '-u' कमांड लाइन स्विच के साथ पाइथन चल रहा था या पर्यावरण चर सेट कर रहा था' PYTHONUNBUFFERED = 1' पाइथन के बफरिंग व्यवहार को बदल देगा। –

40

इस

python -i 

की कोशिश करो और हाँ आप कुछ खामियों यहाँ और वहाँ मिल जाएगा !!!

10

मुझे Mercurial (एचजी) + ओपनएसएसएच, पायथन और MinTTY के साथ एक ही समस्या थी, लेकिन CygWin के बजाय एमएसवाईएस के तहत। फिर भी, जहां तक ​​मैं कह सकता हूं, यह और मेरा मुद्दा मिनीटीटीई के कारण होता था जो देशी विंडोज कंसोल फ़ंक्शंस का उपयोग करने वाले अनुप्रयोगों को संभालने के लिए नहीं थे (एडम द्वारा यहां दिए गए उत्तर में, उन्होंने इसे पायथन के लिए विस्तार से समझाया)।

मेरे लिए, मैं समाधान https://code.google.com/p/mintty/issues/detail?id=56#c64

की टिप्पणी 64 संकलित और मेरे रास्ते में winpty (https://github.com/rprichard/winpty) परियोजना के साथ में पाया पीछा किया, मैं देशी अजगर (इंटरैक्टिव मोड में) और मर्क्युरियल चलाने के लिए सक्षम था विशेष बिल्ड या स्विच के बिना मिंटटी शैल से (जैसे python -i)। मुझे python या hg कमांड से पहले console.exe या console जोड़ने की आवश्यकता थी। सुविधा के लिए, मैंने alias hg="console.exe hg" जैसे उपनाम जोड़े, इसलिए मैं एक ही कमांड का उपयोग कर सकता हूं चाहे मैं लिनक्स खोल में हूं या Windows MinTTY बैश खोल में हूं।

इसके अलावा, यह समाधान पाइथन और एचजी से परे अधिक देशी अनुप्रयोगों के लिए काम करता प्रतीत होता है। उदाहरण के लिए, mysql चल रहा है (-p के साथ या बिना) एक ही समस्या देगी (उदाहरण के लिए "इनपुट इनपुट के साथ" लटका ")। console में इसे जोड़ने के लिए इसे सामान्य रूप से अनुमति दी गई।

+2

मैं * आखिरकार * आपको धन्यवाद देने के लिए 50 प्रतिष्ठा अंक प्राप्त हुए! जबकि ज्यादातर मामलों में '-i' काम करता है, हमारे पास लैब सॉफ़्टवेयर होता है जो ज्यादातर सिग्विन चलाता है, लेकिन फिर विंडोज़ पायथन पर कॉल करता है क्योंकि इसे ctypes.WinDLL की आवश्यकता होती है। इस जीत कॉल में एक एम्बेडेड आईपीथॉन प्रॉम्प्ट है और जो रॉयली को मिट्टी पर गड़बड़ कर दिया गया था (टैब/तीर काम नहीं कर रहे थे, सभी मूर्ख थे)। यह सबसे आसान और सबसे अच्छा समाधान है - एक आकर्षण की तरह काम किया। बैश स्क्रिप्ट में, बस "console.exe C: \ Python27 \ python.exe" किया था और अब एम्बेड ipython महान काम करता है! बालों को खींच रहा था, 64 बिट विंडोज़ पर, मिनीटी शहर में केवल टर्मिनल गेम है। –

1

Cygwin में अजगर के विभिन्न संस्करणों की गैर cygwin स्थानों का प्रबंधन करने के लिए:

$ /usr/sbin/alternatives.exe 

--install और --config विकल्प यहाँ का उपयोग करें, यह एक Linux सिस्टम पर update-alternatives रूप में एक ही काम करता है। मैं इसका उपयोग python -i दृष्टिकोण के साथ कर रहा हूं, और यह अच्छी तरह से काम कर रहा है।

मुझे पहले भी /usr/bin में sym-link फ़ाइलों को हटाना पड़ा, क्योंकि वे सिगविन के पायथन के साथ स्थापित किए गए थे और प्रारंभ में alternatives.exe के माध्यम से प्रबंधित नहीं किए गए थे।

0

मेरा समाधान पायथन ऐप चलाने के लिए एक शेल स्क्रिप्ट लिखना शामिल था।

python file.py "[email protected]" | tee /dev/null 

अतिरिक्त टीई कमांड (कहीं भी नहीं) इस मुद्दे को ठीक करने लगता है।

-1

पुनर्स्थापित mintty के माध्यम से इसे लागू किया जाता है। उसके बाद अजगर -i का उपयोग नहीं करना पड़ा।