2011-10-29 14 views
15

मैं अजगर 3 का उपयोग कर एक छोटे उपयोगिता आवेदन लेखन किया गया है (नीचे testcase भी अजगर 2 में काम करता है फिर भी,) और पीईक्यूटी 4 जो code मॉड्यूल का उपयोग करता है ताकि एक क्यूटी विंडो के साथ बातचीत की अनुमति देने के लिए एक आरईपीएल प्रॉम्प्ट उत्पन्न हो सके।टर्मिनल (अदृश्य पाठ/कोई गूंज) से बाहर निकलने के बाद() इनपुट के दौरान()/raw_input()

दुर्भाग्य से मैं एक समस्या मैं हल करने में असमर्थ किया गया है पर पहुंच जाते हैं: मैं एप्लिकेशन exit() जबकि codeinput() (पायथन 2.x में raw_input() के रूप में जाना जाता है) के अंदर हो जाता है, मेरी लिनक्स टर्मिनल बाद अब गूँज वर्ण टाइप किया है। अर्थात। input() द्वारा जारी कुछ बचने के अनुक्रम के कारण टर्मिनल टूटे हुए राज्य में छोड़ा गया प्रतीत होता है।

मैं exit चल रहा है, वास्तव में इनपुट करने के लिए exit() सौंपने से बाहर निकलने के लिए stdin धारा का अनुकरण करने की कोशिश कर रहा करने के लिए करने के लिए दृष्टिकोण की एक किस्म की कोशिश की है इसे ठीक करने, पूर्व curses मॉड्यूल और अन्य साधनों का उपयोग कर टर्मिनल रीसेट करने से() (unfornunately code.InteractiveConsole.push() कि जिस तरह से काम नहीं करता है, के रूप में एक सोच सकते हैं कि यह होगा), लिखने की कोशिश कर के लिए अपने खुद के threading का उपयोग कर गैर-अवरुद्ध input(), लेकिन मैं एक साथ काम कर रहे कुछ खींच नहीं कर पाए थे।

Here, here, here और here समान समस्याओं के बारे में चर्चाएं हैं।

#!/usr/bin/env python3 

import code 
import sys 
from PyQt4.QtGui import QApplication, QWidget 

app = QApplication(sys.argv) 

app.lastWindowClosed.connect(exit) 

widget = QWidget() 
widget.show() 

code.interact() 

उन के साथ (Py) क्यूटी अपरिचित, यह एक खाली विंडो खुल जाएगा, और जब यह बंद कर दिया है, app से कनेक्शन 'के लिए:

अंत में, यहाँ समस्या प्रदर्शित करने के लिए एक कम testcase है एस lastWindowClosed सिग्नल अंतर्निहित exit() फ़ंक्शन होने के लिए कॉल का कारण बन जाएगा। यह तब होता है, जबकि code मॉड्यूल input() के लिए एक कॉल sys.stdin से पढ़ने के लिए क्रियान्वित किया जाता है। और यहां, जब मैं खिड़की बंद करता हूं, टर्मिनल में टाइपिंग बाद में किसी भी प्रकार के वर्ण नहीं दिखाता है।

मैं मुख्य रूप से पायथन 3 का उपयोग कर रहा हूं, और वास्तविक ऐप पायथन 3-विशिष्ट कोड का उपयोग करता है, लेकिन मैंने पाइथन 2.7 में टेस्टकेस भी कोशिश की है और यह वही समस्या दिखाती है।

+0

मैं Win7 64 बिट python26 में समस्या को पुन: नहीं कर सकते हैं: कुछ शिकार और सिर खरोंच के बाद मुझे पता लगा कि बाहर निकलने के exit() विधि के लिए एक संदर्भ तो मैं exiting() बनाया है और उसमें एक संदर्भ से पारित कर दिया गया था। अगर मैं क्यूटी फ्रेम बंद करता हूं तो कंसोल फिर से सामान्य प्रॉम्प्ट लाता है और मैं उस पर टेक्स्ट दर्ज कर सकता हूं। – joaquin

+1

मुझे यह उल्लेख करना चाहिए था कि मैं इसे लिनक्स पर चला रहा हूं (मैं इसका उल्लेख करने के लिए संपादित करूंगा)। प्लेटफार्मों के बीच टर्मिनल व्यवहार शायद काफी अलग है। जांच के लिए धन्यवाद, यद्यपि! – Sho

उत्तर

15

यह समस्या का कोई वास्तविक समाधान नहीं है, लेकिन यदि आप ऐप बंद करने के बाद टर्मिनल में "रीसेट" टाइप करते हैं, तो यह सामान्य हो जाता है।

मेरे पास एक ऐसे अनुप्रयोग को विकसित करने के दौरान एक ही समस्या थी जब एक पाइप सही ढंग से बंद नहीं किया गया था। शायद कुछ भी इसी तरह हो रहा है।

+0

मुझे पता चला है कि 'रीसेट' और 'टिपट रीसेट' दोनों भरोसेमंद नहीं हैं। – Samveen

0

मैं शाप मॉड्यूल का उपयोग कर एक ही समस्या के लिए चला चुके हैं। इस पृष्ठ पर अन्य उत्तर का उपयोग करना, मैं कार्यक्रम की शुरुआत में import os के साथ समस्या यह किनाराकशी कर ली है, और उसके बाद os.system('reset') के साथ कार्यक्रम समाप्त हो गया।

13

os.system('stty sane') की कोशिश करो। stty sane को इको रीसेट करना है, और कुछ अन्य चीजें जाहिर है।

+1

शानदार! 'Stty sane 'कमांड टर्मिनल को साफ़ किए बिना * कच्चे * मोड से टर्मिनल प्राप्त कर रहा है जो' रीसेट 'कमांड का उपयोग करते समय होता है। धन्यवाद! –

+0

आपका स्वागत है। –

+0

यह उत्तर स्वीकार किया जाना चाहिए। वास्तव में समस्या हल करती है। – udondan

1

Quentin Engles का उत्तर मेरे लिए भी काम करता था लेकिन पाइथन नियोफेट के रूप में मुझे समझ में नहीं आया कि stty sane कहां जाना था।

#!/usr/bin/env python3 

import code 
import sys 
from PyQt4.QtGui import QApplication, QWidget 

def exiting(): 
    os.system('stty sane') 
    exit() 

app = QApplication(sys.argv) 

app.lastWindowClosed.connect(exiting) 

widget = QWidget() 
widget.show() 

code.interact() 
संबंधित मुद्दे