2009-07-27 15 views
14

मैं पिछले पायथन दुभाषिया में इनपुट करने वाले आदेशों के लिए "अप-तीर" करने में सक्षम होना चाहता हूं। मुझे readline मॉड्यूल मिला है जो read_history_file, write_history_file, और set_startup_hook जैसे कार्यों की पेशकश करता है। मैं अभ्यास में इसे रखने के लिए काफी समझदार नहीं हूं, तो क्या कोई मदद कर सकता है? समाधान पर मेरे विचार हैं:पर्सिस्टेंट पायथन कमांड लाइन इतिहास

(1) एक पायथन स्क्रिप्ट चलाने के लिए .login PYTHONSTARTUP संशोधित करें।

def command_history_hook(): 
    import readline 
    readline.read_history_file('.python_history') 
command_history_hook() 

(3) जब भी दुभाषिया बाहर निकलता है, इतिहास फ़ाइल पर लिखने: (2) कि अजगर स्क्रिप्ट फ़ाइल में की तरह कुछ है। ,

def ex(): 
    import readline 
    readline.write_history_file('.python_history') 
    exit() 

यह बहुत कष्टप्रद है कोष्ठकों का उपयोग से बाहर निकलें करने के लिए, हालांकि: मुझे लगता है कि यह करने के लिए सबसे अच्छा तरीका है अपने स्टार्टअप स्क्रिप्ट और बाहर निकलें कि समारोह का उपयोग करने में एक समारोह को परिभाषित करने के लिए है ex()। क्या कोई पाइथन चीनी है जो ex (माता-पिता के बिना) ex फ़ंक्शन चलाने के लिए अनुमति देगी?

क्या इतिहास फ़ाइल प्रत्येक बार लिखने का एक बेहतर तरीका है? सभी समाधान/सुझावों के लिए अग्रिम धन्यवाद।

इसके अलावा, दो वास्तुशिल्प विकल्प हैं जिन्हें मैं देख सकता हूं। एक विकल्प एक एकीकृत कमांड इतिहास होना है। लाभ सादगी है (वैकल्पिक विकल्प जो कई फाइलों के साथ आपकी होम निर्देशिका को झुकाता है।) नुकसान यह है कि आप अलग-अलग टर्मिनल में चलने वाले दुभाषियों को एक दूसरे के कमांड इतिहास के साथ पॉप्युलेट किया जाएगा, और वे एक-दूसरे के इतिहास को ओवरराइट करेंगे। (यह मेरे लिए ठीक है क्योंकि मैं आमतौर पर एक दुभाषिया को बंद करने और मॉड्यूल को फिर से लोड करने के लिए तुरंत दोबारा खोलने में रूचि रखता हूं, और उस स्थिति में कि दुभाषिया के आदेश फ़ाइल में लिखे गए होंगे।) टर्मिनल पर अलग-अलग इतिहास फ़ाइलों को बनाए रखने का एक संभावित समाधान (

def random_key() 
    ''.join([choice(string.uppercase + string.digits) for i in range(16)]) 

def command_history_hook(): 
    import readline 
    key = get_env_variable('command_history_key') 
    if key: 
     readline.read_history_file('.python_history_{0}'.format(key)) 
    else: 
     set_env_variable('command_history_key', random_key()) 

def ex(): 
    import readline 
    key = get_env_variable('command_history_key') 
    if not key: 
     set_env_variable('command_history_key', random_key()) 
    readline.write_history_file('.python_history_{0}'.format(key)) 
    exit() 

16 से यादृच्छिक कुंजी लंबाई कम करने का प्रभाव 1 कहने के लिए आप संभव की कीमत पर 36 करने के लिए अपने निर्देशिका कचरा फ़ाइलों की संख्या कम हो सकता है 2.8: प्रत्येक नए टर्मिनल के लिए एक वातावरण चर आपके द्वारा बनाए गए लिखना है ओवरलैप का% मौका)।

उत्तर

13

मुझे लगता है कि पाइथन दस्तावेज़ों में सुझावों को आप जो चाहते हैं उसे काफी कवर करते हैं। धारा 13 के अंत में pystartup फ़ाइल उदाहरण देखें।3:

या इस पृष्ठ को देखें: बॉक्स इंटरैक्टिव खोल कि यह सब और अधिक प्रदान करता है की एक बाहर के लिए

लेकिन,, आईपीथॉन का उपयोग करने पर एक नज़र डालें:

+0

+1। –

+0

धन्यवाद, एनवी परिवर्तनीय PYTHONSTARTUP और फ़ंक्शन atexit.register जो मैं चाहता था। आपके इनपुट के आधार पर, हालांकि, मैं शायद iPython का उपयोग करूँगा। धन्यवाद! –

+0

इसके लिए धन्यवाद। तुम कमाल हो। –

4

एक पाइथन खोल के रूप में IPython का उपयोग करने का प्रयास करें। आपके पास पहले से ही सबकुछ है जिसके लिए आप पूछते हैं। उनके पास सबसे लोकप्रिय डिस्ट्रोज़ के लिए पैकेज हैं, इसलिए इंस्टॉल करना बहुत आसान होना चाहिए।

+0

सहमत हैं। मैं थोड़ी देर के लिए ipython का उपयोग कर रहा हूं और यह शानदार है, इसमें ऑटो-पूर्णता और इतिहास सुविधा है जिसे आप ढूंढ रहे हैं। – dalloliogm

+0

मैं आईपीथॉन (आज विंडोज़ पर) का उपयोग कर रहा हूं, लेकिन जब मैं इसे चलाता हूं, तो मेरी अप/डाउन तीर कुंजियां मुझे कोई कमांड इतिहास नहीं देती हैं। मैं क्या गलत कर रहा हूं? –

+2

समाधान: 'easy_install pyreadline' को ऊपर/नीचे तीर कुंजियां रखने के लिए Windows पर कमांड इतिहास ब्राउज़ करें। इसके अलावा कुछ अन्य चीजें (जैसे रंग!) अब काम करते हैं। IPython के लिए –

0

PIP का उपयोग करें pyreadline पैकेज स्थापित करने के लिए:

pip install pyreadline 
+0

मैंने पाइप इंस्टॉल रीडलाइन का उपयोग किया – Anoyz

0

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

import readline 

और फिर आप नौसेना के ऊपर/नीचे कुंजी का उपयोग कर सकते हैं गेट पिछले आदेश। 2 या 3.

यह दस्तावेज़ों से मुझे स्पष्ट नहीं था, लेकिन शायद मुझे यह याद आया।

1

पाइथन 3.4 के बाद से लगातार इतिहास बॉक्स से समर्थित है। this bug report देखें।

संबंधित मुद्दे