ইন্টারেক্টিভ পাইথনে আপনি সম্পূর্ণ কমান্ডের ইতিহাসটি কীভাবে দেখছেন?


149

আমি ম্যাক ওএস এক্সে ডিফল্ট অজগর দোভাষী নিয়ে কাজ করছি এবং আমি আমার পূর্ববর্তী কমান্ডগুলি Cmd+ K(সাফ) করেছি। আমি তীরচিহ্নগুলি ব্যবহার করে একে একে তাদের মাধ্যমে যেতে পারি। তবে বাশ শেলের মধ্যে --history বিকল্পের মতো একটি বিকল্প রয়েছে, যা আপনি এতক্ষণ প্রবেশ করানো সমস্ত কমান্ড দেখায়?


historyশেল কমান্ড অন্য কোন মত একটি প্রোগ্রাম। এটি bashকমান্ডের কোনও "বিকল্প" নয় ।
নিলোকট

6
historyনির্ভুলভাবে বলতে গেলে : এটি একটি শেল অন্তর্নির্মিত।
blinry

3
জন্য iPython উত্তর %history। এবং -gবিকল্পটি পূর্বের সেশনগুলি পায় ।
বব স্টেইন

% ইতিহাস -g +% সম্পাদনাটি সর্বোত্তমভাবে কাজ করে
ডায়ানো ফু

উত্তর:



250

পুরো ইতিহাস মুদ্রণের জন্য কোড:

পাইথন ঘ

ওয়ান-লাইনার (দ্রুত কপি এবং পেস্ট):

import readline; print('\n'.join([str(readline.get_history_item(i + 1)) for i in range(readline.get_current_history_length())]))

(বা দীর্ঘতর সংস্করণ ...)

import readline
for i in range(readline.get_current_history_length()):
    print (readline.get_history_item(i + 1))

পাইথন 2

ওয়ান-লাইনার (দ্রুত কপি এবং পেস্ট):

import readline; print '\n'.join([str(readline.get_history_item(i + 1)) for i in range(readline.get_current_history_length())])

(বা দীর্ঘতর সংস্করণ ...)

import readline
for i in range(readline.get_current_history_length()):
    print readline.get_history_item(i + 1)

দ্রষ্টব্য : get_history_item()1 থেকে n তে সূচিযুক্ত।


31
একটি লাইনার:import readline; print '\n'.join([str(readline.get_history_item(i)) for i in range(readline.get_current_history_length())])
ম্যাট

24
এই উত্তরটি (এবং এটির অ-উদাহরণস্বরূপ) লোকদের কাছে কীভাবে গুরুত্বপূর্ণ উদাহরণগুলির উদাহরণ দেয়। ধন্যবাদ।
টিম এস

8
শান্ত! আমি history()আমার পাইথন ইন্টারপ্রেটার স্টার্টআপ স্ক্রিপ্টে উপরের সাথে একটি ফাংশন যুক্ত করেছি (স্ক্রিপ্ট যা env। Var দ্বারা নির্দেশিত $PYTHONSTARTUP)। এখন থেকে, আমি কেবল history()কোনও দোভাষী অধিবেশন টাইপ করতে পারি ;-)
sxc731

2
আমি যখনই ভুলে যাই, এটি কীভাবে করা হয়, আমি উত্তরটির জন্য এখানে আসি, ধন্যবাদ ডেনিস thank
ফিলিপ ভাল্ডেস

3
আমি এই অভিনীত যারা কে জানে এবং আমি আবার একবার এই ধার্মিকতা ছিনিয়ে নিতে ফিরে এসেছি। 👍🏽
বার্তো

45

পাইথন 3 দোভাষী দিয়ে ইতিহাস লিখিত হয়
~/.python_history


আমার কাছে এই ডিরেক্টরি নেই এবং আমি পাইথনটি 3.5.2 ব্যবহার করি

এটি ইউনিক্সের মতো ওএসের জন্য হবে। cat ~/.python_history
রায়ান এইচ।

1
এই উত্তরের জন্য ধন্যবাদ। আমি পরে এখানে ডক্সে
জেসন ভি।

4
দুর্ভাগ্যক্রমে, ভার্চুয়াল পরিবেশ ব্যবহার করার সময় ইতিহাস আপডেট হবে বলে মনে হয় না: - /
ক্রিসফ্রিম্যান

4
quit()বর্তমান অধিবেশন ইতিহাসের অন্তর্ভুক্ত করার জন্য আপনার দোভাষী দরকার~/.python_history
plexoos

9

আপনি যদি কোনও ফাইলে ইতিহাস লিখতে চান:

import readline
readline.write_history_file('python_history.txt')

সহায়তা ফাংশনটি দেয়:

Help on built-in function write_history_file in module readline:

write_history_file(...)
    write_history_file([filename]) -> None
    Save a readline history file.
    The default filename is ~/.history.

এটি কি রুবির পিআর ইতিহাসের মতো অজগর সেশন জুড়ে থাকবে?
lacostenycoder

সম্ভবত এই উত্তরটি পঠনের ফাংশনের আগে লেখা হয়েছিল, তবে কেন পঠনরেখা ব্যবহার করবেন না ?writ_history_file? @lacostenycoder আপনি পড়া ইতিহাস লেখার জন্য উভয়ই পাঠ্যলাইন ব্যবহার করতে পারেন যা স্থির থাকে।
জো হোলোয়

@ জোহোলওয়ে শীতল, আপনাকে ধন্যবাদ! আমি উত্তর পরিবর্তন করেছি!
মার্টিন থোমা

4

যেহেতু উপরেরটি পাইথন ৩.x (বিশেষত ৩.৫) এর জন্য পাইথন ২.x এর জন্য কাজ করে তবে সামান্য পরিবর্তন সহ:

import readline
for i in range(readline.get_current_history_length()):
    print (readline.get_history_item(i + 1))

অতিরিক্ত নোট ()

(.python_history কে পার্স করতে শেল স্ক্রিপ্ট ব্যবহার করা বা উপরের কোডটি সংশোধন করার জন্য পাইথন ব্যবহার করা ব্যক্তিগত স্বাদ এবং পরিস্থিতি হ'ল)


3
Win10 C:\>python -m pip install readline=> Collecting readline\ n Downloading https://files.pythonhosted.org/packages/f4/01/2cf081af8d880b44939a5f1b446551a7f8d59eae414277fd0c303757ff1b/readline-6.2.4.1.tar.gz (2.3MB)\ n |████████████████████████████████| 2.3MB 1.7MB/s\ n ERROR: Complete output from command python setup.py egg_info:\ n ERROR: error: this module is not meant to work on Windows\ n ----------------------------------------`ত্রুটি: কমান্ড" পাইথন সেটআপ.পি ডিম_ইনফো "সি-তে ত্রুটি কোড 1 দিয়ে ব্যর্থ হয়েছে: \ ব্যবহারকারীগণ b ডাব্ল্যাক \ অ্যাপডাটা \ স্থানীয় \ টেম্প \ পিপ-ইনস্টল-এস 6 এম 4 জেকডডব \
রিডলাইন`

1
@ bballdave025 হ্যাঁ, আপনি পারবেন না pip install readline, তবে readlineউইন্ডোজে ডিফল্টরূপে ইনস্টল করা আছে।
জোশিয়ার যোদার

ঠিক আছে, এটি জিনিসগুলিকে সহজ করে তোলে। ধন্যবাদ @
জোসিয়াহা

@ bballdave025 আমি তখন থেকেই শিখেছি যে এটি উইন্ডোতে ডিফল্টরূপে ইনস্টল করা হয় নি তবে আপনি যদি লিঙ্কটি অনুসরণ করেন তবে নির্দেশাবলী বিবরণ দেয় - পাইরেডলাইন ইনস্টল করার মতো কিছু বা কিছু।
জোশিয়ার যোদার

4

আইপিথনে %history -gআপনাকে পুরো কমান্ডের ইতিহাস দেওয়া উচিত। ডিফল্ট কনফিগারেশন আপনার ইতিহাস ডিরেক্টরিতে আপনার ব্যবহারকারীর ডিরেক্টরিতে .python_history নামে একটি ফাইলে আপনার ইতিহাস সংরক্ষণ করে।


3

ইতিহাসটি ইউনিক্স / ব্যাশ সংস্করণের অনুরূপ পাওয়ার জন্য একটি সাধারণ ফাংশন।

আশা করি এটি কিছু নতুন লোককে সহায়তা করবে।

def ipyhistory(lastn=None):
    """
    param: lastn Defaults to None i.e full history. If specified then returns lastn records from history.
           Also takes -ve sequence for first n history records.
    """
    import readline
    assert lastn is None or isinstance(lastn, int), "Only integers are allowed."
    hlen = readline.get_current_history_length()
    is_neg = lastn is not None and lastn < 0
    if not is_neg:
        flen = len(str(hlen)) if not lastn else len(str(lastn))
        for r in range(1,hlen+1) if not lastn else range(1, hlen+1)[-lastn:]:
            print(": ".join([str(r if not lastn else r + lastn - hlen ).rjust(flen), readline.get_history_item(r)]))
    else:
        flen = len(str(-hlen))
        for r in range(1, -lastn + 1):
            print(": ".join([str(r).rjust(flen), readline.get_history_item(r)]))

স্নিপেট: পাইথন 3 দিয়ে পরীক্ষিত। পাইথন 2 এর সাথে কোনও গ্লিটস থাকলে তা আমাকে জানান। নমুনা:

সম্পূর্ণ ইতিহাস: ipyhistory()

শেষ 10 ইতিহাস: ipyhistory(10)

প্রথম 10 ইতিহাস: ipyhistory(-10)

আশা করি এটি ফেলাসকে সহায়তা করবে।


ওহে ধন্যবাদ. আমি আপনার কোড স্নিপেট একটি ফাইল xx.py. তারপরে অজগরটি খোলার পরে, আমি এক্সএক্স আমদানি করেছি। তখন আমি আইপিস্টি () চেষ্টা করেছিলাম তবে এটি বলে যে, ">>> আইপিস্টি ট্রেসব্যাক (সর্বশেষতম কল শেষ): ফাইল" <স্টিডেন> ", লাইন 1, <মডুল> নেম এরর: নাম 'আইপিস্টি'র সংজ্ঞা দেওয়া হয়নি"। কোনো সমস্যা?
চ্যান কিম

লাইন নম্বরগুলি প্রিন্ট না করার জন্য আমি এটিকে সংশোধন করেছি যেহেতু সাধারণত তারা আমার পক্ষে আসে তবে আমি লাইন সীমাবদ্ধতা পছন্দ করি। (এমনকি ইউনিক্সেও আমি সাধারণত cut -c 8এগুলি আউট করি ))
জোশিয়াহ যোদার

1

@ জেসন-ভি, এটি সত্যিই সাহায্য করে, ধন্যবাদ। তারপরে, আমি এই উদাহরণগুলি পেয়েছি এবং নিজের স্নিপেটের জন্য রচনা করেছি।

#!/usr/bin/env python3
import os, readline, atexit
python_history = os.path.join(os.environ['HOME'], '.python_history')
try:
  readline.read_history_file(python_history)
  readline.parse_and_bind("tab: complete")
  readline.set_history_length(5000)
  atexit.register(readline.write_history_file, python_history)
except IOError:
  pass
del os, python_history, readline, atexit 

1

এটি আপনাকে পৃথক লাইনে মুদ্রিত কমান্ডগুলি দেবে:

import readline
map(lambda p:print(readline.get_history_item(p)),
    map(lambda p:p, range(readline.get_current_history_length()))
)

আপনি দয়া করে কোড ফর্ম্যাট করার বিষয়ে আরও নির্দিষ্ট হতে পারেন? আপনি কি বলছেন যে প্রথম বন্ধনী মিলছে না?
আইডিয়া 4 লাইফ

আমি কিছু সাধারণ ইনডেন্টেশন দিয়ে ফর্ম্যাটটি ঠিক করেছি। @ আলেক্সআন্দ্রিভ আপনি নিজের ডাউনটোট সরিয়ে ফেলতে পারেন।
ক্রিসফ্রিমন

0

এর rehash Doogle এর উত্তর যে printline সংখ্যার করে না, কিন্তু লাইন প্রিন্ট করতে সংখ্যা উল্লেখ করার অনুমতি নেই।

def history(lastn=None):
    """
    param: lastn Defaults to None i.e full history. If specified then returns lastn records from history.
           Also takes -ve sequence for first n history records.
    """
    import readline
    assert lastn is None or isinstance(lastn, int), "Only integers are allowed."
    hlen = readline.get_current_history_length()
    is_neg = lastn is not None and lastn < 0
    if not is_neg:
        for r in range(1,hlen+1) if not lastn else range(1, hlen+1)[-lastn:]:
            print(readline.get_history_item(r))
    else:
        for r in range(1, -lastn + 1):
            print(readline.get_history_item(r))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.