अजगर खोल में तीर कुंजियों को दबाते हुए भागने के पात्रों को देखना


191

इंटरेक्टिव पाइथन शेल की तरह गोले में, आप आमतौर पर तीर कुंजियों का उपयोग कर सकते हैं वर्तमान लाइन में चारों ओर जाने के लिए या पिछले कमांड (तीर-अप के साथ) आदि।

लेकिन जब मैं दूसरी मशीन में जाता हूं और pythonवहां से शुरू होता हूं, तो मुझे सत्र मिलते हैं:

>>> import os 
>>> ^[[A    

जहां अंतिम पात्र तीर-अप से आता है। या, तीर-बाएँ का उपयोग कर:

>>> impor^[[D

मैं इसे कैसे ठीक करूं?

नियमित बैश में, तीर कुंजी ठीक काम करती है। अजीब व्यवहार सिर्फ इंटरैक्टिव पाइथन (या पर्ल आदि) शेल में है।


मुझे लगता है कि यह सर्वर-फॉल्ट पर आधारित है। यह गलत टर्मिनल प्रकार के कारण होता है।
एपोचॉल्फ

मैं कार्टमैन से नीचे सहमत हूं कि यह एक रीडलाइन मुद्दा है, टर्मिनल प्रकार का मुद्दा नहीं।
फ्रैंक

2
easy_install readline और फिर easy_install ipython मैक में परफेक्ट काम करता है।
gnuyoga

एनाकोंडा 2 या एनाकोंडा 3 और सेट .स्टार्टअप स्थापित करें। कृपया लिंक
लियोन वांग

1
@LeWWANG एक बुरा जवाब देता है - एनाकोंडा के रूप में विशाल कुछ स्थापित न करें बस अपने .Pystartup फ़ाइल को प्राप्त करने के लिए। पूरी तरह से अनावश्यक।
jdogg

जवाबों:


38

ऐसा लगता है कि रीडलाइन सक्षम नहीं है। जाँच करें कि क्या PYTHONSTARTUPचर को परिभाषित किया गया है, मेरे लिए यह इंगित करता है /etc/pythonstartऔर उस फ़ाइल को इंटरैक्टिव जाने से पहले अजगर प्रक्रिया द्वारा निष्पादित किया जाता है, जो रीडलाइन / इतिहास हैंडलिंग को सेटअप करता है।

@Chown के लिए धन्यवाद यहाँ इस पर डॉक्स हैं: http://docs.python.org/2/tutorial/interactive.html


धन्यवाद, मैं मानता हूं कि रीडलाइन इस मुद्दे को लगता है। सिस्टम में /usr/lib/libreadline.so.5 है। कोई / etc / pythonstart नहीं है।
फ्रैंक

1
कुछ googling के बाद ऐसा लगता है कि उस सिस्टम पर अजगर को पुनः स्थापित किया जा सकता है, रीडलाइन-डेवेल को स्थापित करने के बाद।
फ्रैंक

1
पर्यावरण चर है PYTHONSTARTUP, नहीं PYTHONSTART। वितरण-विशिष्ट /etc/pythonstartफ़ाइल के बारे में निश्चित नहीं है ।
नेड डिली

1
दरअसल, docs.python.org/2/tutorial/interactive.html पढ़ने से एक pystartup फ़ाइल के लिए आवश्यक सभी जानकारी मिल जाती है।
chown

7
काढ़ा के साथ OSX पर, मुझे बस इतना करना थाbrew reinstall python3
रणहिरु जूडे कोरे

102

मैंने readlineपैकेज स्थापित करके इस समस्या को हल कर दिया है :

pip install readline

24
मुझे libncurses-devअपनी उबंटू मशीन पर स्थापित करना था , फिर रीडलाइन को सही तरीके से स्थापित किया।
अमीर एल्डर

4
स्थापित ncurses-develCentOS पर और उसके बाद readlineकोई समस्या नहीं स्थापित किया। इंटरएक्टिव शेल अब काम कर रहा है।
one.time

1
yum ने ncurses-devel स्थापित किया
एलेक्स पुन्नन

4
pip install readlineमेरे OS X मशीन पर नहीं , हर बार सफलतापूर्वक करने के बाद भी विफल रहता हैbrew install readline
user5359531

9
मुझे gnureadlineइसके बजाय स्थापित करना था, देखें stackoverflow.com/q/43013060/2846923
The Hat with the Hat

82

ओएस एक्स पर, मुझे अलग समस्या है।

जब मैं सिस्टम पाइथन शेल का उपयोग कर रहा हूं, तो कुंजी कोई समस्या नहीं है, लेकिन वर्चुअन में समस्या है। मैं virtualenv / readline को पुनर्स्थापित / अपग्रेड करने की कोशिश करूंगा और कुछ भी निश्चित नहीं होगा।

जब मैं import readlineसमस्या अजगर शेल में समस्या का प्रयास करता हूं , तो यह त्रुटि संदेश प्राप्त करें:

ImportError: dlopen(/Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so
Reason: image not found

कारण है, /usr/local/opt/readline/lib/libreadline.7.dylibलेकिन नहीं है libreadline.6.dylib, इसलिए मैं एक प्रतीक लिंक बनाता हूं:

ln -s libreadline.7.dylib libreadline.6.dylib

समस्या हल हो गई है!


देखने और देखने के बाद मैं इस सुझाव के साथ समस्या को ठीक करने में सक्षम था। धन्यवाद!
gl051

क्या यह समस्या का कारण नहीं होगा अगर कोई v6 कहता है, यह महसूस नहीं करता कि यह वास्तव में v7 है?
एडम बार्न्स

3
मुझे भी यही समस्या थी, लेकिन इन निर्देशों के बजाय, मैंने किया brew update && brew upgrade। क्या इस प्रक्रिया में PHP टूटी हुई है जो अभी तक देखी जानी बाकी है।
एडम बार्न्स

@AdamBarnes इसने भी मेरे लिए चाल चली। मैं pyenv का भी उपयोग करता हूं, इसलिए सभी होमबायरेरी पैकेज को अपग्रेड करने के बाद मुझे उन अजगर संस्करणों को अनइंस्टॉल / रीइंस्टॉल करना सुनिश्चित करना चाहिए, जिनकी मुझे आवश्यकता थी।
फन्सेकी

3
मेरे पास libreadline.7.dylib नहीं था (शायद इसलिए कि मैं Mojave 10.14.x पर हूं और फिर XCode 10.2.1 अपडेट किया गया) लेकिन इसके बजाय ver 8 था। निष्पादन ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylibने स्कैन कोड की समस्या को ठीक किया, लेकिन इतिहास कमांड को वापस नहीं लाया। हालांकि इस मामले में, आधा फिक्स कोई नहीं से बेहतर है। (हां, मैंने 6 के लिए एक लिंक भी जोड़ा, कोई अंतर नहीं)। परिशिष्ट: यह मेरे लिए python2 के साथ केवल एक समस्या थी / है। python3 लिंक के बिना ठीक काम किया।
ज़िम

51

OS X पर, Xcode अपडेट कभी-कभी टूट जाते हैं readline। उपाय:

brew uninstall readline
brew upgrade python3
brew install readline
pip3 install readline

यदि समस्या अभी भी बनी हुई है, तो इसका उपयोग करके इसे हटाने और स्थापित करने readlineका प्रयास करें :pipeasy_install

pip3 uninstall readline
easy_install readline

यदि आप सिस्टम पायथन 2.7.10 का उपयोग कर रहे हैं तो क्या कोई समतुल्य है?
user5359531

3
@ user5359531 मैंने एक easy_installविकल्प के साथ उत्तर को अपडेट किया है
मैक्स

OSX 10.12 उपयोगकर्ता भी: stackoverflow.com/questions/7375545/…
ptim

1
easy_installमेरे लिए काम का उपयोग करना , जबकि पाइप के साथ काम नहीं करता है।
जस्टफुल

1
इसके साथ संयुक्त brew link readline(भले ही यह पहले से जुड़ा हुआ था) ने इसे मेरे लिए तय किया।
रिचर्ड रास्ट

28

OS X पर, अजगर 3.5 और virtualenv का उपयोग कर रहा है

$ pip install gnureadline

दुभाषिया में:

import gnureadline

अब तीर कुंजी ठीक से काम करना चाहिए।


अतिरिक्त जानकारी...

नोट अक्टू 1, 2015 के रूप में है कि - ReadLine किया गया है बहिष्कृत किया गया (स्रोत https://github.com/ludwigschwardt/python-readline )

इसके बजाय gnureadline का उपयोग करें (देखें: https://github.com/ludwigschwardt/python-gnureadline )

यदि मैं अजगर 3.5 का उपयोग कर gnureadline के बजाय रीडलाइन स्थापित करता हूं, तो मुझे दुभाषिया में आयात करने के प्रयास के बाद त्रुटियां प्राप्त होती हैं:

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so
  Reason: image not found

यह काम करता है, लेकिन इसका मतलब है कि मुझे import gnureadlineहर इंटरैक्टिव सत्र के शीर्ष पर जोड़ना होगा जो वास्तव में कष्टप्रद है। क्या हर इंटरेक्टिव सत्र की शुरुआत में इसे बंद करने का एक तरीका है?
एंटोन कोड्स

1
@Panchishin PYTHONSTARTUP वातावरण चर का उपयोग करके ऐसी फ़ाइल का नाम रखने की कोशिश करता है जिसमें इंटरैक्टिव प्रांप्ट प्रदर्शित होने (यानी import gnureadline) से पहले पायथन कमांड को निष्पादित किया गया हो । संभावित अन्य विचारों के लिए भी देखें: स्वचालित रूप से लोड किए गए आयातों के साथ पायथन कमांड लाइन दुभाषिया
चलाएं

20

मैं इस मुद्दे पर हाल ही में और बहुत कुछ पढ़ने के बाद pip install readline(मैक ओएसएक्स के लिए काम नहीं करता है) और pip install gnureadlineसंतुष्ट नहीं होने के बाद भी चला हूं , यह अब मेरा सेटअप है जो किसी भी अजगर कंसोल में तीर कुंजी का उपयोग करने में सक्षम बनाता है:

  1. का उपयोग कर gnureadline स्थापित करें pip install gnureadline

अब आप या तो कर सकते हैं import gnureadlineऔर तीर कुंजियों को उम्मीद के मुताबिक काम करना चाहिए। उन्हें काम करने के लिए स्वचालित रूप से निम्न चरणों का पालन करें:

  1. फ़ाइल बनाएँ (या संलग्न करें) ~/.startup.py:import gnureadline
  2. फ़ाइल में संलग्न करें ~/.bash_profile:export PYTHONSTARTUP=~/.startup.py

एक चीज जो काम नहीं करती है, लेकिन मेरे पिछले सेटअप में थी: पर gnureadline का स्वचालित आयात pdb.set_trace()। अगर किसी के पास इस समस्या का अच्छा हल है तो मैं एक टिप्पणी के लिए आभारी रहूंगा।


15
  1. रीडलाइन-डेवेल पैकेज स्थापित करें।
  2. रीडलाइन मॉड्यूल के साथ पुनर्नवीनीकरण अजगर
  3. बिंगो!

2
मेरे जीवन की गुणवत्ता में सुधार के लिए धन्यवाद! {;; सेंटो 5.5 पर, कि यम ने रीडलाइन-डेवेल स्थापित किया है और आपको पुनर्मूल्यांकन में स्पष्ट रूप से रीडलाइन निर्दिष्ट करने की आवश्यकता नहीं है
michela

3
हम पायथन को कैसे पुनः व्यवस्थित करते हैं? क्या मुझे स्रोत (./configure, make, make make) से अर्क पाइथन स्थापित करने की आवश्यकता है, virtualenv सेट करें और अपने सभी पैकेजों को फिर से स्थापित करें?
मुहम्मद वकार

14

मुझे Ubuntu 16.04 LTS पर पाइथन 3.6.x के शेल इतिहास (टैब / एरो कमांड) की समस्या थी।

पायथन 3.6.x स्रोत से स्थापित किया गया था।

मेरे लिए क्या हल किया गया था "कमांड लाइन का उपयोग करके user12345 द्वारा कहा गया मॉड्यूल" gnureadline "स्थापित करें:

sudo pip3.6 install gnureadline

:)


1
मैंने अन्य सभी समाधानों की कोशिश की लेकिन यह मेरे लिए मेरे अजगर 3.6
उमैर

1
यह सुनिश्चित करने के लिए कि import gnureadlineयह काम करने के लिए शेल में कॉल करे
डेविड शुमन

3
कोई जरूरत नहीं sudo
Newalp

11

यहाँ चरणों जो मेरे लिए ubuntu 12.04 में अजगर 3.3 के लिए काम किया है।

1) खुले मंदिर और लिखना sudo apt-get install libreadline-dev

2) http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz से अजगर 3.3.2 की स्रोत फ़ाइल डाउनलोड करें

3) इसे निकालें और एक शेल में पायथन-3.3.2 / निर्देशिका पर नेविगेट करें

4) निम्नलिखित कमांड निष्पादित करें:

./configure
make
make test
sudo make install

7

मैक को उच्च सिएरा में अपग्रेड करने के बाद प्रभावित हुआ, इसने इसे सफलतापूर्वक मेरे लिए हल किया:

brew unlink python
xcode-select --install
brew install python

5

CentOS पर, मैं इसे ठीक करता हूं

yum install readline-devel

और फिर अजगर 3.4 को फिर से कांपना।

OpenSUSE पर, मैं इसे ठीक करता हूं

pip3 install readline

वलेरियो क्राइनी के जवाब के बाद।

शायद "pip3 इंस्टॉल रीडलाइन" एक सामान्य समाधान है। मेरे CentOS पर कोशिश नहीं की गई।


रीडलाइन-डेवेल टिप के साथ अच्छा कॉल। यह मेरे लिए एक Centos6.5 मशीन पायथन अजगर 2.7.8 अफवाह पर काम किया। मैंने सीधे pip install readlineअजगर को फिर से देखे बिना फोन किया और यह ठीक काम कर गया।
अर्जुन

3

मैंने निम्न कार्य करके इसे ठीक किया:

  • yum readline-devel स्थापित करें
  • पाइप लाइन की रीडलाइन

    • मुझे यहाँ एक और त्रुटि का सामना करना पड़ा:

      gcc: readline/libreadline.a: No such file or directory

      gcc: readline/libhistory.a: No such file or directory

      मैंने इसे स्थापित करके तय किया patch:

      yum install patch

उसके बाद मैं pip install readlineसफलतापूर्वक भागने में सफल रहा जिसने मेरे अजगर के खोल में भागने के पात्रों को हल किया।

FYI करें, मैं RedHat का उपयोग कर रहा हूं


सेंटोस 6.8, पायथन 2.7.12, एक सफलता
kkzxak47

3

यदि आप एनाकोंडा पायथन का उपयोग करते हैं, तो आप इसे चलाकर ठीक कर सकते हैं:

conda install readline

मेरे लिए काम किया!


2
मेरे मामले में, readlineपहले से ही स्थापित है, मुझे conda install ncursesइसे काम करने के लिए करना होगा।
जब

3

कोंडा का उपयोग करने वालों के लिए, कोंडा-फोर्ज चैनल से रीडलाइन पैकेज स्थापित करने से समस्या ठीक हो जाएगी:

conda install -c conda-forge readline=6.2

2

आप के साथ ssh कॉल किया था आयकर पैरामीटर आप के लिए एक आभासी टर्मिनल आवंटित करने के लिए ssh बताने के लिए?

मैन पेज से:

-t
फ़ोर्स छद्म टैटी आवंटन। इसका उपयोग दूरस्थ मशीन पर मनमाने ढंग से स्क्रीन आधारित कार्यक्रमों को निष्पादित करने के लिए किया जा सकता है, जो मेनू सेवाओं को लागू करते समय बहुत उपयोगी हो सकता है। एकाधिक-विकल्प विकल्प tty आवंटन को बाध्य करते हैं, भले ही ssh के पास कोई स्थानीय tty न हो।

इसके अतिरिक्त आपको सर्वर पर TERM एनवायरमेंट वैरिएबल को किसी अन्य पोस्ट में सुझाए गए तरीके से सही तरीके से सेट करना पड़ सकता है ।


2

मैक ओएस एक्स Mojave 10.14.6 के साथ विभिन्न ऐतिहासिक इंस्टॉल के brewसाथ मैंने इसे हल किया:

brew reinstall python2

कोई जादू की गोली होने की संभावना नहीं है, क्योंकि सभी में अलग-अलग इंस्टॉल परिदृश्य है। मैंने ऊपर भी कोशिश की है, तो हो सकता है कि यह कुछ उत्तरों का संयोजन हो। python3यदि आपने python2पैकेज स्थापित किया है तो इसे फिर से डिफाल्ट करना होगा ताकि इसे फिर से इंस्टॉल किया जा सके।


2

इनमें से किसी भी उत्तर ने मेरे लिए उबंटू के दो अलग-अलग संस्करणों पर काम नहीं किया। मेरे लिए क्या काम किया है, लेकिन एक सही तय नहीं है, एक कॉल में मेरे अजगर कोड लपेट रहा है rlwrap(ubuntu repositories में उपलब्ध):

rlwrap python mycode.py


1

क्या आपने एक अलग SSH क्लाइंट का उपयोग करने की कोशिश की है? कुछ SSH क्लाइंट के पास अलग-अलग दूरस्थ प्रक्रियाओं के लिए विशेष, बिल्ट-इन कीमैपिंग हैं। मैं इस में बहुत कुछ भागा।

आप किस क्लाइंट का उपयोग कर रहे हैं? मैं उनके व्यवहार की तुलना करने के लिए पोटीन और सिक्योरसीआरटी की कोशिश करूँगा।


हम्म, मैं टर्मिनल में ssh कमांड का उपयोग करता हूं (ssh -v कहता है OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003)।
फ्रैंक

पोटी (इसके मुक्त) का प्रयास करें और हमारे पास वापस आ जाएं :)
जोश जोर्डन

ठीक है, मैंने बस पोटीन को स्थापित किया और इसे मशीन से कनेक्ट करने के लिए उपयोग किया, लेकिन वहां व्यवहार समान है।
फ्रैंक

:( निश्चित रूप से एक सर्वर-साइड मुद्दा तब। मैं इस पर गौर करूंगा और आपके पास वापस आऊंगा।
जोशर्डन

कुछ अन्य मशीन से जुड़ने के लिए ssh कमांड का उपयोग करना ठीक काम करता है: वहाँ, मुझे एरो कीज़ की कोई समस्या नहीं है। यह एक विशेष प्रणाली लगती है जिसमें परेशानी होती है।
फ्रैंक

1

रीडलाइन मॉड्यूल को पदावनत किया गया है जो कि अजगर के खोल में बाहर निकलने () या बाहर निकलने () को निष्पादित करते समय नवीनतम पायथन संस्करणों में अमान्य पॉइंटर त्रुटि का कारण होगा। pip install gnureadlineबजाय


0

जब आपका काम ठीक हो और [b] जब वे न हों तो आपका env चर $ TERM सेट [a] कैसे हो? एनवी सेटिंग्स अक्सर ऐसी समस्याओं की कुंजी होती हैं।


1
मैंने अभी कुछ TERM वेरिएबल वैल्यूज़ की कोशिश की: vt102, vt220, ansi, xterm, लेकिन उनमें से किसी ने भी व्यवहार नहीं बदला।
फ्रैंक

0

सर्वर पर चल रहे एक महत्वपूर्ण कोड लाइब्रेरी को प्राप्त करने का प्रयास करें। अगर वह काम नहीं करता है तो पढ़ने-की-क्षमता वाली लाइब्रेरी डाउनलोड करने की कोशिश करें।


0

मैं Ubuntu 14.0 पर पायथन 2.7 बनाने की कोशिश कर रहा था। आपको libreadline-dev की आवश्यकता होगी। हालाँकि, यदि आप इसे apt-get से प्राप्त करते हैं, तो वर्तमान संस्करण 6.3 है, जो पायथन 2.7 के साथ असंगत है (पायथन 3 के बारे में निश्चित नहीं है)। उदाहरण के लिए, डेटा प्रकार "फ़ंक्शन" और "CPPFunction", जिसे रीडलाइन के पिछले संस्करणों में परिभाषित किया गया था, 6.3 में हटा दिया गया है, जैसा कि यहां बताया गया है:

https://github.com/yyuu/pyenv/issues/126

यह कहना है कि आपको रीडलाइन के पुराने संस्करण का स्रोत कोड प्राप्त करने की आवश्यकता है। मैंने लाइब्रेरी के लिए apt-get से libreadline 5.2 स्थापित किया है, और हेडर फ़ाइलों के लिए 5.2 का स्रोत कोड प्राप्त करता हूं। उन्हें / usr / में शामिल करें।

अंत में मुद्दा हल हो गया है।


0

MacOsx पर, मैंने रीडलाइन को पुनर्स्थापित करके इसे ठीक किया

brew reinstall readline
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.