मैं पिछले पायथन दुभाषिया में इनपुट करने वाले आदेशों के लिए "अप-तीर" करने में सक्षम होना चाहता हूं। मुझे 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: प्रत्येक नए टर्मिनल के लिए एक वातावरण चर आपके द्वारा बनाए गए लिखना है ओवरलैप का% मौका)।
+1। –
धन्यवाद, एनवी परिवर्तनीय PYTHONSTARTUP और फ़ंक्शन atexit.register जो मैं चाहता था। आपके इनपुट के आधार पर, हालांकि, मैं शायद iPython का उपयोग करूँगा। धन्यवाद! –
इसके लिए धन्यवाद। तुम कमाल हो। –