পাইথন ৩.৪-এ নতুন ইতিহাস বৈশিষ্ট্যটি কীভাবে অক্ষম করতে পারি?


10

পাইথন ৩.৪-তে আপগ্রেড করার পরে, সমস্ত ইন্টারেক্টিভ কমান্ড লগইন হয়েছে ~/.python_history। পাইথন এই ফাইলটি তৈরি বা লেখার জন্য চাই না।

/dev/nullকাজ না করার জন্য একটি সিমিলিংক তৈরি করা , পাইথন ফাইলটি সরিয়ে পুনরায় তৈরি করে। ডকুমেন্টেশন মুছে ফেলতে প্রস্তাব দেওয়া sys.__interactivehook__, কিন্তু এই এছাড়াও ট্যাব-সমাপ্তি সরিয়ে ফেলা হয়। এই ইতিহাস ফাইলটি অক্ষম করার জন্য কী করা উচিত তবে ট্যাব-সমাপ্তি সংরক্ষণ করে?

অতিরিক্ত তথ্য:


আপনি কি এটিকে মূলের কাছে ছড়িয়ে দেওয়ার চেষ্টা করেছেন?
স্বর্ণিলোক

@ গোল্ডিলোকগুলি আমি গ্রহণযোগ্য সমাধান হিসাবে বিবেচনা করি না এবং ব্যবহারও করছি না chattr। আমি একটি একক (ব্যবহারকারী) কনফিগারেশন ফাইল বা পরিবেশের পরিবর্তনশীল খুঁজছি।
লেকেনস্টেইন

ঠিক আছে, তবে আপনি ইতোমধ্যে জেনে গেছেন যে কোনও নথিপত্রের দিকে নজর দেওয়ার পরে এ জাতীয় কোনও গ্রহণযোগ্য সমাধান নেই।
সোনারলোকস

প্রকৃতপক্ষে, কয়েক সপ্তাহ আগে থেকে এই বাগ রিপোর্টেchmod পাইথন ডেভস দ্বারা প্রদত্ত সমাধানটি কি সমাধানের পরামর্শ দেওয়া হয়েছে , যদিও এখানে কিছু উল্লেখ রয়েছে ( গ্রন্থাগারের কাজ বাদে সেখানে বিটিডাব্লু নেই)। ~/.inputrcman readline
স্বর্ণিলোক

@ গোল্ডিলকস হ্যাঁ, আমি সেই বাগ প্রতিবেদনের সাথে লিঙ্ক করতে চলেছিলাম। inputrcযদিও আমি কীভাবে ব্যবহার করব জানি না এবং chmodআমার পক্ষেও কাজ করে না, ফাইলটি যাইহোক পরিবর্তিত হয় (আর্চ লিনাক্স)। একটি info inputrcপৃষ্ঠা বিদ্যমান আছে , তবে আমি সাধারণত তথ্য পৃষ্ঠাগুলি পড়তে এতটা খুশি নই কারণ সেগুলি চলাচল করা কঠিন।
লেকেনস্টেইন

উত্তর:


7

পাইথন ৩.6 হিসাবে, আপনি এটি অক্ষম করতে রিডলাইন.সেট_আউটো_ইস্টরি ব্যবহার করতে পারেন :

import readline
readline.set_auto_history(False)

পাইথন শেলের জন্য এটি ভাল, তবে সাবধান হন: এটি আইপথনে কাজ করবে বলে মনে হয় না।
z0r

এটি ইতিহাস পুরোপুরি অক্ষম করে। ব্যক্তিগতভাবে আমি আমার দোভাষী অধিবেশনটিতে ইতিহাস সংরক্ষণের সাথে ভাল আছি, তবে আমি কেবল আমার ইতিহাসটি ডিস্কে লেখা এবং অধিবেশনগুলি জুড়ে সংরক্ষণ করতে চাই না।
জেমসডলিন

কাজ করে না। এটি ফাইলটি সংরক্ষণ করা থামায় না এবং পরিবর্তে এটি অধিবেশন চলাকালীন ইতিহাসকে ভেঙে দেয়। যাই হোক না কেন, পরের বার আপনি চালানোর সময় পাইথন নীরবে "বৈশিষ্ট্য" ফিরিয়ে আনবে।
বোয়ান

5

এটি আমার পক্ষে কাজ করে।

~/.pythonrcফাইল তৈরি করা হচ্ছে :

import os
import atexit
import readline

readline_history_file = os.path.join(os.path.expanduser('~'), '.python_history')
try:
    readline.read_history_file(readline_history_file)
except IOError:
    pass

readline.set_history_length(0)
atexit.register(readline.write_history_file, readline_history_file)

তারপরে এটি রফতানি করুন:

export PYTHONSTARTUP=~/.pythonrc

এটি মনে হয় যদি আমি ভুল না হয়ে থাকি তবে কোনও ইতিহাসের ফাইলটি অক্ষম করার পরিবর্তে এটি অক্ষম করার পরিবর্তে সক্ষম হতে পারে ? যাদুকরী কিছু না করলে? ট্যাব-সমাপ্তি ফাংশনগুলির জন্য করা হয়, ইতিহাস নয়। set_history_length
লেকেনস্টেইন

@ লেকেনস্টেইন: হ্যাঁ, এটি ইতিহাসের আকারকে সমান শূন্য করে তোলে তাই ইতিহাসের ফাইলে কিছুই লেখা হয় না। ওহ, আমি যদিও আপনি অধিবেশন মধ্যে কমান্ড সংরক্ষণ করতে চান।
cuonglm

2
এটি এখনও ~/.python_historyলেখার কারণ হতে পারে (যাচাই করে PYTHONSTARTUP=$HOME/.pythonrc strace -e file,write -o /tmp/st python)। আমি ভাবতে শুরু করি যে এটি অক্ষম করার কোনও উপায় নেই, তবে কোডটি নকল না করে ট্যাব-সমাপ্তি রাখুন /usr/lib/python3.4/site.py
লেকেনস্টেইন

আফাইক, সত্যিই এটি অক্ষম করার কোনও উপায় নেই।
cuonglm

2

আর একটি ~ / .pythonrc সমাধান:

import readline
readline.write_history_file = lambda *args: None

আমি জানি না কেন এটি আরও বেশি উত্সাহিত হয় না। এই সহজ এবং সরাসরি শুষে লেখার ইতিহাস ফাইল পরিবর্তে ইতিহাস সম্পূর্ণরূপে অক্ষম করা হচ্ছে।
জেমসডলিন

এটিই ছিল আমার পক্ষে একমাত্র কাজ fix ধন্যবাদ।
বোয়ান

1

পাইথনকে লেখা থেকে বিরত রাখতে ~/.python_history, এই কার্যকারিতাটি সক্রিয় করে এমন হুকটি অক্ষম করুন :

import sys
# Disable history (...but also auto-completion :/ )
if hasattr(sys, '__interactivehook__'):
    del sys.__interactivehook__

আপনি যদি ট্যাব-সমাপ্তি সক্ষম করতে এবং ইতিহাস বৈশিষ্ট্যটি অক্ষম করতে চান তবে আপনি site.enablerlcompleterকোডটি মানিয়ে নিতে পারেন । নিম্নলিখিত কোডটি লিখুন ~/.pythonrcএবং export PYTHONSTARTUP=~/.pythonrcএটি সক্ষম করার জন্য আপনার শেলটিতে সেট করুন।

import sys
def register_readline_completion():
    # rlcompleter must be loaded for Python-specific completion
    try: import readline, rlcompleter
    except ImportError: return
    # Enable tab-completion
    readline_doc = getattr(readline, '__doc__', '')
    if readline_doc is not None and 'libedit' in readline_doc:
        readline.parse_and_bind('bind ^I rl_complete')
    else:
        readline.parse_and_bind('tab: complete')
sys.__interactivehook__ = register_readline_completion

0

পাইথন নিজেই কোনও উপায়ে স্থির না করা পর্যন্ত আপনি ইউনিক্স সিস্টেমে এটি করতে পারেন:

rm ~/.python-history
mkdir ~/.python-history
sudo chattr +i ~/.python-history || sudo chflags simmutable ~/.python-history

তারপরে আপনি পাচ্ছেন

অ্যাটেক্সট-এ ত্রুটি _

#AdirectoryError: [এরর্নো 21] একটি ডিরেক্টরি

প্রতিবার আপনি অজগর শেলটি সমাপ্ত করবেন। প্রস্থান স্থিতি এখনও থাকবে 0

লক্ষ্য করুন যে আপনি যদি এটি ফাইল হিসাবে ছেড়ে যান তবে আপনাকে অন্য একটি ফাইল তৈরি এবং অপরিবর্তনীয় করতে হবে, ~/.python_history


0

নিম্নলিখিতটি একটি ফাইলে রাখুন এবং PYTHONSTARTUPএটিতে সেট করুন (বা ফাইলটি কল করুন sitecustomize.pyএবং এটিকে অ্যাক্সেসযোগ্য করুন PYTHONPATH)

import readline
import atexit
import sys

sys.__interactivehook__()
atexit.unregister(readline.write_history_file)

এইভাবে এখনও আপনার ট্যাব-সমাপ্তি এবং পূর্ববর্তী ইতিহাসে অ্যাক্সেস থাকবে তবে আপনি যে কমান্ডগুলি লিখেছেন তা ইতিহাসের ফাইলে যুক্ত হবে না।


এটি কাজ করে বলে মনে হচ্ছে না (আর্ক লিনাক্সের পাইথন ৩.৩.১), ইতিহাসের ফাইলটি এখনও প্রস্থানের বাইরে লেখা থাকে এমনকি PYTHONSTARTUPস্ক্রিপ্টের মাধ্যমে বাস্তবায়িত হয়।
Lekensteyn

আমি এটি কেবল আমার আর্চ লিনাক্স ভিএম
বেরিরিও

0

এখানে আমার পদ্ধতি (যা মূলত বেরডারিওর পদ্ধতির আরও নির্ভরযোগ্য এবং পাইথোনিক সংস্করণ হিসাবে প্রমাণিত হয়েছিল)। এটি কেবলমাত্র লিখতে অক্ষম করে .python_history, তবে এটি উপস্থিত থাকলে তা থেকে পড়া না করা বা বর্তমান উদাহরণের ইতিহাসে নতুন লাইন যুক্ত করা। আমি এটিকে সংরক্ষণ করার পরামর্শ দিচ্ছি site-packages/sitecustomize.py, কারণ siteএটি মডিউল যা উভয়ই লিখে .python_historyএবং আমদানি করে sitecustomizeযদি তা বিদ্যমান থাকে তবে এটি অন্য কিছু নামকরণ করা এবং PYTHONSTARTUPকাজের সাথে এটির দিকেও ইঙ্গিত করা ।

import sys
oldhook = getattr(sys, '__interactivehook__', None)
if oldhook:
    def newhook():
        import readline, atexit
        oldhook()
        atexit.unregister(readline.write_history_file)
    sys.__interactivehook__ = newhook

আপডেট: আমি আমার সিস্টেমের জন্য সুনির্দিষ্ট 3.7 এর জন্য কী করেছি, পেপ 8 নয়:

import rlcompleter,readline as r,sys
def f():r.parse_and_bind('tab:complete');r.read_init_file()
sys.__interactivehook__=f

পাইথন ৩. 3..৩। কাজ করছে না. ইতিহাস এখনও লগড।
বোয়ান

0

আমার বর্তমান সমাধান (পাইথন 3 এর সাম্প্রতিক পর্যায়ে সংস্করণগুলির জন্য) default / .python_history- র ডিফল্ট ব্যবহার প্রতিরোধ করে তবে ইতিহাসের স্পষ্ট লেখার সম্ভাব্যতা একটি নির্দিষ্ট ফাইলটিতে (readline.write_history_file (ফাইলের নাম) বা readline.append_history_file ব্যবহার করে ... )) কারও পাইথনস্টার্টআপ ফাইলে নিম্নলিখিতটি থাকতে হবে:

import readline
import time

readline.add_history("# " + time.asctime()) # prevent default use of ~/.python_history
readline.set_history_length(-1) # unlimited

এটি দোভাষীর শুরু হওয়ার সাথে সাথে সুস্পষ্টভাবে লিখিত কোনও ইতিহাসের লেবেলযুক্ত (আমার জন্য) পার্শ্ব প্রতিক্রিয়াযুক্ত। এটা তোলে জন্য ফিক্স কারণ কাজ করে বাগ 5845 যা দেখা যায় এখানে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.