अजगर इंटरप्रेटर शेल में अंतिम कमांड कैसे दोहराएं?


134

मैं अंतिम आदेश कैसे दोहराऊं? सामान्य कुंजियाँ: ऊपर, Ctrl + Up, Alt-p काम नहीं करता है। वे निरर्थक चरित्रों का निर्माण करते हैं।

(ve)[kakarukeys@localhost ve]$ python
Python 2.6.6 (r266:84292, Nov 15 2010, 21:48:32) 
[GCC 4.4.4 20100630 (Red Hat 4.4.4-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "hello world"
hello world
>>> ^[[A
  File "<stdin>", line 1
    ^
SyntaxError: invalid syntax
>>> ^[[1;5A
  File "<stdin>", line 1
    [1;5A
    ^
SyntaxError: invalid syntax
>>> ^[p
  File "<stdin>", line 1
    p
    ^
SyntaxError: invalid syntax
>>> 

ऊपर तीर मेरे (उबंटू) के लिए सही ढंग से काम करता है, यह अजीब है।
विंसेंट सेवर्ड

3
डीटो, अप एरो मेरे लिए विंडोज पर काम करता है। आप किस शेल का उपयोग कर रहे हैं, और किस ओएस पर टर्मिनल प्रोग्राम?
नोव

मैंने फेडोरा 13 पर एक अलग अजगर 2.6.6 इंस्टॉलेशन स्थापित किया, virtualenv चलाएं, गनोम-टर्मिनल पर डिफ़ॉल्ट पायथन शेल का उपयोग करके
kakarukeys

5
केवल एक FYI करें, उन "निरर्थक" वर्णों को "एस्केप अनुक्रम" डीईसी द्वारा विकसित किया गया है और अन्य उन दिनों में जब मेनफ्रेम कंप्यूटर फोन लाइनों पर टर्मिनलों द्वारा एक्सेस किए गए थे। ^ [ईएससी (बच) है, ^ [[बच रहा है- [या सीएसआई (नियंत्रण अनुक्रम सर्जक, IIRC) और CSI-A "अप" के लिए अनुक्रम है। और जब आप ncurses को सक्षम करते हैं, तो नीचे दिए गए उत्तर का उपयोग करके, उन अनुक्रमों को प्रदर्शित करने के बजाय व्याख्या की जाती है।
jcomeau_ictx

4
मुझे स्रोत (Python3.4) से पायथन के संस्करण को स्थापित करने के कारण यह समस्या थी। नीचे दी गई कुछ टिप्पणियाँ Ipython को स्थापित करने की सलाह देती हैं और मैं यह उल्लेख करना चाहता हूं कि Ipython के साथ भी मेरा यही व्यवहार है। Ubuntu 12.04 सर्वर के लिए, मुझे इंस्टॉल करना थाlibncurses-dev libreadline-dev और फिर configure-make-installपायथन और उसके बाद यह काम किया। उत्तर के रूप में जोड़ा गया ...
erewok

जवाबों:


60

मैं अजगर शेल पर इतिहास को सक्षम करने के लिए निम्नलिखित का उपयोग करता हूं।

यह मेरी .pythstartup फ़ाइल है। PYTHONSTARTUP पर्यावरण चर इस फ़ाइल पथ पर सेट किया गया है।

# python startup file 
import readline 
import rlcompleter 
import atexit 
import os 
# tab completion 
readline.parse_and_bind('tab: complete') 
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') 
try: 
    readline.read_history_file(histfile) 
except IOError: 
    pass 
atexit.register(readline.write_history_file, histfile) 
del os, histfile, readline, rlcompleter

इसे सक्षम करने के लिए आपको मॉड्यूल रीडलाइन, rlcompleter की आवश्यकता होगी।

इस पर जानकारी की जाँच करें: http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP

आवश्यक मॉड्यूल:

  1. http://docs.python.org/library/readline.html
  2. http://docs.python.org/library/rlcompleter.html

@ user496852: बस एनवी चर PYTHONSTARTUP को उपर्युक्त कोड वाली फ़ाइलपथ पर सेट करें। यह भी जांचें, यदि आपके पास आवश्यक मॉड्यूल हैं।
3:11 बजे pyfunc

6
यह आवश्यक नहीं है, बस बेसक के जवाब के निर्देश का पालन करें और कुंजी बाइंडिंग असाइन करें
टिमोफेई

1
एक ओवरकिल। बस alt + p
user32882

164

आईडीएलई में, विकल्प पर जाएँ -> कॉन्फ़िगर आईडीएलई -> कुंजी और वहाँ इतिहास-अगला और फिर इतिहास-पिछले कुंजी को बदलने के लिए चुनें।

फिर सिलेक्शन के लिए Get New Keys पर क्लिक करें और आप जो भी कुंजी संयोजन चाहते हैं उसे चुनने के लिए तैयार हैं।


4
खोजकर्ताओं के लिए, यह लिनक्स मिंट 17 दालचीनी में भी काम करता है।
user1063287

4
विंडोज 10, अजगर 3.6.1 के लिए भी काम करता है। बहुत बहुत धन्यवाद, यह साफ और स्पष्ट है, जासूसी। नए शिक्षार्थियों के लिए उपयोगी है।
जॉयो

1
सबसे उचित जवाब। सही के रूप में चुना जाना चाहिए था।
डेविडसन लीमा

कोई विकल्प नहीं है -> पाइथन 2.7 के लिए IDLE कॉन्फ़िगर करें: /
DaniPaniz

मुझे सेटिंग्स / वरीयताओं पर जाने की जरूरत है (अजगर 2.7, मैक के लिए आईडीएल) और वहां मुझे इतिहास-अगला मिला, बहुत बहुत धन्यवाद आप सबसे अच्छे हैं :)
DaniPaniz

48

इतिहास से अगले आदेश के लिए ऑल्ट + p हिस्टरो से पिछले कमांड के लिए, Alt + n।

यह डिफ़ॉल्ट रूप से कॉन्फ़िगर किया गया है, और आप विकल्प से अपनी प्राथमिकता पर इन कुंजी शॉर्टकट को बदल सकते हैं -> कॉन्फ़िगर आईडीएलई।


2
इसे इतिहास-अगला / इतिहास-पिछला कहा जाता है
DaniPaniz

17

आपने यह नहीं बताया कि कौन सा वातावरण है। मान लें कि आप IDLE का उपयोग कर रहे हैं।

IDLE प्रलेखन से: कमांड इतिहास:

Alt-p retrieves previous command matching what you have typed.
Alt-n retrieves next.
      (These are Control-p, Control-n on the Mac)
Return while cursor is on a previous command retrieves that command.
Expand word is also useful to reduce typing.

अधिक जानकारी के लिए: docs.python.org/2/library/idle.html#python-shell-window
रचनात्मक

1
यह वह समाधान है जिसकी मैं IDLE में तलाश कर रहा हूं। अप ऐश ने बैश शेल से लॉन्च किए गए अजगर इंटरप्रेटर पर काम किया।
जॉन डो

8

ALT + p विंडोज़ में मेरे लिए उत्साहित पायथन पर काम करता है।


7

Ctrl + p अप एरो का सामान्य विकल्प है। सुनिश्चित करें कि आपके पास अपने पायथन बिल्ड में ग्नू रीडलाइन सक्षम है।


1
यह पूछता है कि क्या मैं प्रिंट करना चाहता हूं
ashleedawg

7

Ubuntu सर्वर 12.04 पर, मुझे स्रोत (Python3.4) से पायथन के संस्करण को स्थापित करने के बाद यह समस्या थी।

यहाँ कुछ टिप्पणियाँ Ipython को स्थापित करने की सलाह देती हैं और मैं यह उल्लेख करना चाहता हूं कि Ipython के साथ भी मेरा यही व्यवहार है। मैं जो बता सकता हूं, यह एक रीडलाइन समस्या है।

Ubuntu 12.04 सर्वर के लिए, मैं स्थापित करने के लिए किया था libncurses-devऔर libreadline-devऔर फिर ऊपर से इतिहास (ReadLine) व्यवहार के लिए स्रोत से अजगर को स्थापित सक्षम हो। मैंने बहुत ही ऐसा किया:

sudo apt-get install libncurses-dev libreadline-dev

उसके बाद, मैंने पहले से इंस्टॉल किए गए पायथन (नॉट द सिस्टम पीथॉन, जिसे मैंने दूसरे से इंस्टॉल किया था!) ​​को डिलीट कर दिया और इसे सोर्स से रीइंस्टॉल कर दिया और सब कुछ उम्मीद के मुताबिक काम किया।

मुझे पाइप या संपादन .pythonstartup के साथ कुछ भी स्थापित करने की आवश्यकता नहीं थी।


2
जो कोई भी इस समस्या का सामना करना पड़ता के लिए, मैं 14.04 पर हूँ और अभी भी इस समाधान का उपयोग करने के लिए इस समस्या से जा रहा ठीक करने में सक्षम था 3.4.0करने के लिए 3.4.2
ctzdev 3

2
मैं sudo pip install readlineइसे करने के लिए काम करने के लिए यह करने की जरूरत है (अजगर 2.7.11)
रोब वाट 23

1
इसने 64-बिट उबंटू 16 पर भी मेरे लिए काम किया। मेरे पास 32-बिट पायथन 3.5.2 है, जो पहले से उपयुक्त 64-बिट पायथन के अलावा, स्रोतों से संकलित और स्थापित है। sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386स्रोत-निर्मित पायथन को बस किया और पुनः स्थापित किया।
एलेक्स Che

7

डिफ़ॉल्ट रूप से पिछली कमांड के लिए ALT + p का उपयोग करके, आप IDLE GUi >> OPtions >> कॉन्फ़िगर IDLE >> कुंजी >> कस्टम कुंजी बाइंडिंग के बजाय अप-एरो में बदल सकते हैं। कस्टम स्क्रिप्ट को चलाने के लिए यह संभव नहीं है, इसके अलावा रीडलाइन मॉड्यूल भी नहीं है विंडोज में चलाएं। आशा है कि मदद। :)


3

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

yum install readline-devel

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

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

pip3 install readline

: इस उत्तर का जिक्र करते हुए https://stackoverflow.com/a/26356378/2817654 । शायद "pip3 इंस्टॉल रीडलाइन" एक सामान्य समाधान है। मेरे CentOS पर कोशिश नहीं की गई।


3

मेरे मैक ओएस python3 में आप उपयोग कर सकते हैं: नियंत्रण + p प्रारंभिक कमांड contrlo + n अगला कमांड


3

मुझे इस बात की जानकारी है कि मैंने नीचे दिए गए प्रश्न का उत्तर दिया

अपने आप को आईडीईएल में एडाप्ट करें: पिछली कमांड को वापस लाने के लिए अप एरो को हिट करने के बजाय, यदि आप अपने कर्सर को पिछली कमांड पर रखते हैं जिसे आप दोहराना चाहते हैं और फिर "एन्टर" दबाएं, उस कमांड को वर्तमान कमांड प्रॉम्प्ट में दोहराया जाएगा। प्रेस फिर से दर्ज करें, और कमांड निष्पादित हो जाता है।

अपने आप को ढालने के लिए आईडीएल को बल दें: यदि आप आईडीएल कमांड प्रॉम्प्ट विंडो काम में तीर कुंजी बनाने के लिए जोर देते हैं, जैसे हर दूसरे कमांड प्रॉम्प्ट में, आप ऐसा कर सकते हैं। "विकल्प" मेनू पर जाएं, "कॉन्फ़िगर आईडीएलई" चुनें, और फिर "कुंजी"। उस कुंजी को बदलना जो "पिछले कमांड" और "नेक्स्ट कमांड" एक्शन के साथ क्रमशः एरो और डाउन एरो होना है।

स्रोत


2
alt+p  
go into options tab
configure idle
Keys

history-previousकमांड के लिए नीचे देखें , आप इसे एक बार यहां बेहतर तरीके से पसंद कर सकते हैं।


2

मुझे समझ नहीं आता कि इस बारे में इतने लंबे स्पष्टीकरण क्यों हैं। आपको बस इतना करना है कि pyreadline पैकेज स्थापित करें :

pip install py-readline

सूडो पोर्ट पी-रीडलाइन (मैक पर) स्थापित करें

(मान लें कि आपने पहले ही PIP स्थापित कर लिया है ।)


2
मेरे लिए 'पाइप इंस्टॉल रीडलाइन' ने काम किया। मेरे सभी नियंत्रण अनुक्रम
सेंटोस

"एक ऐसा संस्करण नहीं मिला जो आवश्यकता पाई-रीडलाइन को संतुष्ट करता हो (संस्करणों से:) पाई-रीडलाइन के लिए कोई मिलान वितरण नहीं मिला" मुझे इस दुनिया से नफरत है
DaniPaniz

सुनिश्चित करें कि आप उपयोग करते हैं pip2या pip3, आपके द्वारा इंस्टॉल किए गए संस्करण के आधार पर।
22

2

आपको OSX के लिए pyfunc के उत्तर की तरह एक कस्टम स्क्रिप्ट की जरूरत नहीं है (कम से कम mavericks पर)। आइडल में आइडल पर क्लिक करें -> प्राथमिकताएं -> कुंजी, "इतिहास-अगला" और "इतिहास-पिछला" का पता लगाएं, और या तो उन्हें अपने डिफ़ॉल्ट कीबोर्ड शॉर्टकट के साथ छोड़ दें या "प्रतिरूप तीर" और "डाउन एरो" ठेठ अपेक्षित टर्मिनल व्यवहार के अनुसार असाइन करें ।

यह OSX Mavericks पर आइडल 2.7 पर है।


2

यदि आप अपने सिस्टम इंस्टालेशन को ठीक करने के लिए डेबियन जेसी का उपयोग करते हैं 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

अपनी अन्य 3.5.2स्थापना को ठीक करने के लिए जिसे मैंने pyenv के साथ स्थापित किया है :

pip install readline

सूत्रों का कहना है:

[1] https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/

[२] https://github.com/yyuu/pyenv/issues/240

[३] https://stackoverflow.com/a/40229934/332788


Libncurses5-dev और libncursesw5-dev स्थापित करना मेरे पायथन 3.5 इंस्टॉलेशन को ठीक करने के लिए पर्याप्त था, लेकिन मैंने इसके लिए रीडलाइन मॉड्यूल स्थापित करने के बाद पायथन 3.6 को तोड़ दिया। शायद फिर से बनाने की जरूरत है।
एंड्री मकुक्खा

इसने मुझे Ubuntu 18.04 python संस्करण 3.7.3pip install readline
akpp

2

कमान की शुरुआत में जाने के लिए तीर कुंजियों का उपयोग करना और वर्तमान कमांड के रूप में प्रतियां दर्ज करना।

तो बस इसे फिर से चलाने के लिए दर्ज मारा।


1

Ipython वैसे भी नहीं है ... मुझे यह बहुत पसंद है, लेकिन यदि आप ipython के साथ Django खोल को चलाने की कोशिश करते हैं। >>> जैसा कुछ

ipython manage.py shell

यदि आप virtualenv का उपयोग करते हैं तो यह सही ढंग से काम नहीं करता है। Django को कुछ विशेष की आवश्यकता होती है, जो कि अगर आप ipython शुरू नहीं करते हैं, तो यह नहीं है, क्योंकि यह डिफ़ॉल्ट सिस्टम python शुरू करता है, लेकिन यह वर्चुअल नहीं है।


1

यह तब हो सकता है जब आप python script.pyबनाम बस चलाते हैंpython इंटरएक्टिव शेल दर्ज करने के लिए चलाते हैं, रीडलाइन अक्षम होने के अन्य कारणों के बीच।

प्रयत्न:

import readline

1

ऊपर तीर केवल पायथन कमांड लाइन में काम करता है।

IDLE (Python GUI) में डिफॉल्ट्स हैं: Alt-p: जो आपने टाइप किया है, उससे पहले के कमांड मैचिंग को पुनः प्राप्त करता है। Alt-n: अगले को पुनः प्राप्त करता है ... उदाहरण के लिए पायथन 2.7.9 में, आप एक्शन कीज़ को सेलेक्ट करते / बदल सकते हैं: विकल्प -> कॉन्फ़िगर आईडीएलई -> (टैब) कीज़


1

अजगर 3.5 के लिए एनाकोंडा के लिए, मुझे स्थापित करने की आवश्यकता है ncurses

conda install ncurses

ncursesस्थापित टैब के पूरा होने के बाद , बाएं और दाएं तीर के माध्यम से इतिहास, और नेविगेट करना संवादात्मक खोल में काम किया।


1

अजगर के साथ मैक पर 2.x

➜ ~ brew install rlwrap

शुरुआत rlwrap से करें

➜ ~ rlwrap python


1

अजगर में अंतिम आदेश को दोहराने के लिए, आप <Alt + n>खिड़कियों में उपयोग कर सकते हैं


0

ऊपर तीर मेरे लिए भी काम करता है। और मुझे नहीं लगता कि आपको पायथन बिलिन कमांडलाइन के लिए रीडलाइन मॉड्यूल स्थापित करने की आवश्यकता है। U को Ipython को जांचने का प्रयास करना चाहिए। या हो सकता है कि यह आपके कीबर्ड मैप की समस्या हो।


0

यदि MacOSX का उपयोग कर रहे हैं, तो control pऊपर और control nनीचे साइकिल चलाने के लिए दबाएँ । मैं आईडीएल पायथन 3.4.1 शेल का उपयोग कर रहा हूं।


0

अजगर 3.4 मैकेल में मैक ओएस में नियंत्रण + पी है


0

उबंटू 16.04 पर, स्रोत कोड से प्रीलोडेड 3.5 से संस्करण 3.7 तक पायथन को अपग्रेड करने के बाद मुझे यही समस्या थी । जैसा कि @erewok ने सुझाव दिया था, मैंने किया

sudo apt-get install libncurses-dev libreadline-dev

इसके sudo make install बाद : इसके बाद, तीर-कुंजी ने काम किया। सुनिश्चित नहीं है कि समस्या को ठीक करने के लिए कौन से मॉड्यूल की आवश्यकता है या दोनों, लेकिन बिना "इंस्टॉल किए", कोई भी काम नहीं करेगा। प्रारंभिक बनाने के दौरान, कुछ लाल-ध्वज त्रुटियां थीं, लेकिन अनदेखी और निर्माण को पूरा किया। इस बार, कोई त्रुटि नहीं हुई।

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