[python] 파이썬 대화식 세션을 저장하는 방법?

파이썬의 인터프리터를 사용하여 데이터베이스, 파일 등을 다루는 데 자주 사용됩니다. 기본적으로 반 구조적 데이터의 수동 형식이 많이 있습니다. 유용한 비트를 원하는만큼 자주 저장하고 정리하지 않습니다. 대화식 세션의 일부 기록 인 쉘 (DB 연결, 변수 할당, 작은 for 루프 및 비트)에 입력을 저장하는 방법이 있습니까? 내가 같은 script것을 사용하면 너무 많은 stdout 노이즈가 발생합니다. 나는 실제로 모든 객체를 피클 할 필요는 없습니다. 그러나 그렇게하는 해결책이 있다면 괜찮습니다. 이상적으로는 대화식으로 만든 스크립트로 실행되는 스크립트가 그대로 남아 있으며 필요하지 않은 비트를 삭제할 수 있습니다. 이 작업을 수행하는 패키지가 있습니까, 아니면 DIY 방식이 있습니까?

업데이트 : 나는이 패키지의 품질과 유용성에 정말 놀랐습니다. 가려움증이 비슷한 사람들의 경우 :

  • IPython-몇 년 동안 이것을 사용하고 있었어야합니다.
  • reinteract- 매우 인상적입니다. 시각화에 대해 더 많이 배우고 싶습니다. 그래프를 인라인으로 렌더링하는 gtk / gnome 데스크탑 앱의 일종. 하이브리드 쉘 + 그래프 계산기 + 미니 일식을 상상해보십시오. 여기에 소스 배포판 : http://www.reinteract.org/trac/wiki/GettingIt . Ubuntu에 잘 구축되어 그놈 데스크탑, Windows 및 Mac 설치 프로그램에도 통합됩니다.
  • bpython- 극도로 시원하고 멋진 기능, 자동 완성 (!), 되감기, 파일에 한 번의 키 스트로크 저장, 들여 쓰기 등이 있습니다. 파이썬 소스 배포는 sourceforge에서 몇 가지 종속성을 가져 왔습니다.

나는 회심하여 해석자와 편집자 사이의 필요를 채워줍니다.



답변

IPython 은 대화식 세션을 사용하는 경우 매우 유용합니다. 귀하의 사용 사례에 대한 예를 들어이 마법 명령 , 방금 입력 10 ~ 20 및 23에 입력 라인을 저장 (모든 라인의 수에 의해 접두사이 함께 도움말을).%save%save my_useful_session 10-20 23my_useful_session.py

또한 설명서에는 다음이 명시되어 있습니다.

이 함수는 입력 범위에 대해 % history 와 동일한 구문을 사용한 다음 행을 지정한 파일 이름으로 저장합니다.

예를 들어 다음과 같은 이전 세션을 참조 할 수 있습니다.

%save current_session ~0/
%save previous_session ~1/

기능에 대한 간략한 개요를 보려면 프리젠 테이션 페이지의 비디오를 보십시오 .


답변

http://www.andrewhjon.es/save-interactive-python-session-history

import readline
readline.write_history_file('/home/ahj/history')


답변

그것을 할 수 있는 방법 이 있습니다. 파일을 ~/.pystartup…에 저장

# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it:  "export PYTHONSTARTUP=/home/user/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.

import atexit
import os
import readline
import rlcompleter

historyPath = os.path.expanduser("~/.pyhistory")

def save_history(historyPath=historyPath):
    import readline
    readline.write_history_file(historyPath)

if os.path.exists(historyPath):
    readline.read_history_file(historyPath)

atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath

PYTHONSTARTUP셸에서 환경 변수를 설정하십시오 (예 🙂 ~/.bashrc.

export PYTHONSTARTUP=$HOME/.pystartup

무료로 자동 완성하려면 다음을 추가하십시오.

readline.parse_and_bind('tab: complete')

이것은 * nix 시스템에서만 작동합니다. readline은 유닉스 플랫폼에서만 사용할 수 있습니다.


답변

당신이 사용하는 경우 IPython을 당신은 마법의 함수를 사용하여 파일에 이전의 모든 명령을 저장할 수 있습니다 % 기록을-f 매개 변수, PE :

%history -f /tmp/history.py


답변

Ipython을 설치 하고 다음 명령을 실행하여 Ipython 세션을 연 후 :

ipython

명령 행에서 다음 Ipython ‘magic’명령을 실행하여 전체 Ipython 세션을 자동으로 기록하십시오.

%logstart

이렇게하면 고유 한 이름의 .py 파일이 만들어지고 나중에 대화 형 Ipython 세션으로 사용하거나 선택한 스크립트에서 사용할 수 있도록 세션이 저장됩니다.


답변

또한 reinteract 는 Python 세션에 대한 노트북과 유사한 인터페이스를 제공합니다.


답변

IPython 외에도 유사한 유틸리티 bpython 에는 “입력 한 코드를 파일에 저장”기능이 있습니다.