인터랙티브 Python에서 전체 명령어 이력을 어떻게 보십니까?
Mac OS X에서 기본 python interpreter를 사용하고 있으며 이전 명령어를 +(삭제)했습니다.K화살표 키를 사용하여 하나씩 살펴볼 수 있습니다.그런데 bash 쉘에 --history 옵션과 같은 옵션이 있나요?이 옵션은 지금까지 입력한 모든 명령어를 보여줍니다.
전체 이력을 인쇄하기 위한 코드:
파이썬 3
원라이너(빠른 복사 및 붙여넣기):
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까지 인덱스가 붙습니다.
길이를 가져오고 각각을 보는 데 사용합니다.
python 3 interpreter를 사용하면 이력을 다음에 씁니다.
~/.python_history
이력을 파일에 쓰는 경우:
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.
IPython의 경우%history -g명령어 이력의 전체를 나타냅니다.기본 설정에서는 사용자 디렉토리의 .python_history라는 파일에도 이력이 저장됩니다.
위의 내용은 python 3.x for python 3.x(구체적으로 3.5)에서만 작동하므로 유사하지만 약간의 수정이 필요합니다.
import readline
for i in range(readline.get_current_history_length()):
print (readline.get_history_item(i + 1))
추가()에 주의합니다.
(셸 스크립트를 사용하여 .timeout_history를 해석하거나 python을 사용하여 위의 코드를 수정하는 것은 개인의 취향과 상황에 따라 다릅니다.)
@Jason-V씨, 정말 도움이 됩니다.감사합니다.그리고 이 예시를 찾아서 나만의 조각으로 구성했어요.
#!/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
unix/bash 버전과 유사한 이력을 가져오는 간단한 함수입니다.
새로운 사람들에게 도움이 됐으면 좋겠어요.
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)]))
단편:Python3에서 테스트 완료.python2에 결함이 있으면 알려주세요.샘플:
전체 이력:
ipyhistory()
최근 10개의 이력:
ipyhistory(10)
처음 10회 이력:
ipyhistory(-10)
도움이 됐으면 좋겠군
그러면 다음 명령어가 별도의 행으로 출력됩니다.
import readline
map(lambda p:print(readline.get_history_item(p)),
map(lambda p:p, range(readline.get_current_history_length()))
)
Doogle의 답변의 리해시는 행 번호를 인쇄하지 않지만 인쇄할 행 수를 지정할 수 있습니다.
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))
언급URL : https://stackoverflow.com/questions/6558765/how-do-you-see-the-entire-command-history-in-interactive-python
'source' 카테고리의 다른 글
| mysqldump는 1개의 테이블만 내보냅니다. (0) | 2023.01.06 |
|---|---|
| Axios와 Fetch의 차이점은 무엇입니까? (0) | 2022.12.24 |
| HTML5 로컬 스토리지와세션 스토리지 (0) | 2022.12.24 |
| 이 Unbound Local Error가 발생하는(닫힘) 이유는 무엇입니까? (0) | 2022.12.24 |
| 브라우저 창에서 현재 탭을 닫으려면 어떻게 해야 합니까? (0) | 2022.12.24 |