मैं फेडोथन 2.7.3 के साथ readline
मॉड्यूल का उपयोग कर रहा हूं। मुझे उबंटू 12.10 के साथ यह समस्या नहीं है।पायथन रीडलाइन मॉड्यूल आयात के दौरान भागने वाले चरित्र को प्रिंट करता है
import readline
के दौरान, एक बचने वाला चार प्रदर्शित होता है।
$ python -c 'import readline' |less
ESC[?1034h(END)
आमतौर पर जब मैं इस तरह अप्रत्याशित उत्पादन मिलता है, मैं इसे एक डमी फ़ाइल वर्णनकर्ता (नीचे उदाहरण) के लिए stdout/stderr
पुनर्निर्देशन का उपयोग कर संभाल। लेकिन इस बार, यह विधि काम नहीं करती है।
import sys
class DummyOutput(object):
def write(self, string):
pass
class suppress_output(object):
"""Context suppressing stdout/stderr output.
"""
def __init__(self):
pass
def __enter__(self):
sys.stdout = DummyOutput()
sys.stderr = DummyOutput()
def __exit__(self, *_):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
if __name__ == '__main__':
print 'Begin'
with suppress_output():
# Those two print statements have no effect
# but *import readline* prints an escape char
print 'Before importing'
import readline
print 'After importing'
# This one will be displayed
print 'End'
आप एक test.py
लिपि में इस स्निपेट चलाते हैं, तो आपको लगता है कि suppress_output
संदर्भ के अंदर, print
बयान वास्तव में कर रहे दबा, लेकिन नहीं बच चार देखेंगे।
- कैसे यह संभव इस एस्केप वर्ण के लिए के माध्यम से प्राप्त करने के लिए है:
$ python test.py |less Begin ESC[?1034hEnd (END)
तो यहाँ मेरे दो सवाल कर रहे हैं?
- इसे दबाने के लिए कैसे करें?
ऐसा लगता है कि मॉड्यूल टर्मिनल स्थिति को बचने के क्रम में बदलना चाहता है लेकिन यह काम नहीं करता है। आपको इसके आसपास काम करने की कोशिश नहीं करनी चाहिए, इसके बजाय इसे ठीक करें। – wRAR
हां, यहां पर एक वर्कअराउंड है जो http://reinout.vanrees.org/weblog/2009/08/14/readline-invisible-character-hack.html पर आधारित है। लेकिन इसने मेरे पहले सवाल का जवाब नहीं दिया :) (और मुझे डर था कि बहुत पोर्टेबल नहीं था, लेकिन मैं गलत हो सकता हूं)। – Alex
मुझे संदेह है कि आपका टर्मिनल और/या टर्मिनो डीबी इस समस्या का कारण बनता है। – wRAR