Python 대화형 세션을 저장하는 방법
Python의 인터프리터를 사용하여 데이터베이스나 파일 등을 조작하는 경우가 많습니다.기본적으로 반구조화된 데이터의 수동 포맷을 많이 하고 있습니다.나는 내가 원하는 만큼 유용한 부분들을 적절히 저장하고 정리하지 않는다.입력 내용을 셸에 저장하는 방법(DB 연결, 변수 할당, 루프 및 논리 비트는 거의 없음) - 대화형 세션의 일부 이력이 있습니까?이런 걸 쓰면script소음이 너무 심해요.모든 물건을 피클에 담글 필요는 없지만, 만약 그렇게 할 수 있는 솔루션이 있다면 괜찮습니다.이상적으로는 인터랙티브하게 작성한 스크립트가 실행되어 불필요한 부분은 삭제할 수 있습니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★?
IPython은 인터랙티브세션을 사용하는 경우에 매우 유용합니다.예를 들어, 사용 사례에는 magic 명령어가 있습니다.%save my_useful_session 10-20 23및을 10~20 23으로 저장합니다. 23으로 저장합니다.my_useful_session.py(미국의)
또한 문서에는 다음과 같이 기술되어 있습니다.
이 함수는 입력 범위에 %history와 동일한 구문을 사용하여 지정한 파일 이름에 행을 저장합니다.
이를 통해 예를 들어 다음과 같은 오래된 세션을 참조할 수 있습니다.
%save current_session ~0/
%save previous_session ~1/
프레젠테이션 페이지의 비디오를 보고 기능에 대한 간단한 개요를 확인하십시오.
Andrew Jones 웹사이트 (아카이브) :
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은 Unix 플랫폼에서만 사용할 수 있습니다.
IPython을 사용하는 경우 -f 파라미터와 함께 매직 함수 %history를 사용하여 이전의 모든 명령을 파일에 저장할 수 있습니다.p . e :
%history -f /tmp/history.py
Ipython 설치 후 다음 명령을 실행하여 Ipython 세션을 엽니다.
ipython
명령줄에서 다음 Ipython 'magic' 명령을 실행하면 Ipython 세션 전체가 자동으로 기록됩니다.
%logstart
그러면 고유한 이름의 .py 파일이 생성되고 세션이 저장되므로 나중에 대화형 Ipython 세션으로 사용하거나 선택한 스크립트에서 사용할 수 있습니다.
또한 재해석 기능을 통해 Python 세션에 노트북과 같은 인터페이스를 사용할 수 있습니다.
IPython 이외에도 유사한 유틸리티 bpython에는 "입력한 코드를 파일에 저장" 기능이 있습니다.
나는 답을 찾기 위해 애를 써야 했다. 나는 iPython 환경에 매우 생소했다.
이거면 될 거야
iPython 세션이 다음과 같은 경우
In [1] : import numpy as np
....
In [135]: counter=collections.Counter(mapusercluster[3])
In [136]: counter
Out[136]: Counter({2: 700, 0: 351, 1: 233})
1 ~ 135 의 행을 보존하고 나서, 같은 ipython 세션상에서 이 커맨드를 사용합니다.
In [137]: %save test.py 1-135
그러면 모든 python 문이 test.py 파일의 현재 디렉토리(ipython을 시작한 위치)에 저장됩니다.
입력 이력(및 출력 옵션)을 인쇄 및 저장하기 위한 %history 매직이 있습니다.
을 ""라는 의 파일에 my_history.py:
>>> %hist -f my_history.py
[ History IPython ]에는 사용자가 입력한 명령어와 생성된 결과가 모두 저장됩니다.위 화살표 키와 아래 화살표 키를 사용하여 이전 명령을 쉽게 확인하거나 보다 정교한 방법으로 이력에 액세스할 수 있습니다.
%history 매직 함수를 사용하여 과거 입력 및 출력을 검사할 수 있습니다.이전 세션의 입력 이력은 데이터베이스에 저장되며 출력 이력을 저장하도록 IPython을 설정할 수 있습니다.
%edit, %rerun, %recall, %macro, %save 및 %pastebin을 포함한 여러 다른 마법 함수가 입력 이력을 사용할 수 있습니다.표준 형식을 사용하여 행을 참조할 수 있습니다.
%pastebin 3 18-20 ~1/1-5
이 경우 현재 세션에서 3행, 18~20행, 이전 세션에서 1-5행이 사용됩니다.
%history 참조Docstring 및 기타 예를 참조하십시오.
또한 IPython에서 변수의 경량 지속성을 위한 %store 매직의 기능을 살펴보십시오.
변수, 별칭 및 매크로를 IPython 데이터베이스에 저장합니다.
d = {'a': 1, 'b': 2}
%store d # stores the variable
del d
%store -r d # Refresh the variable from IPython's database.
>>> d
{'a': 1, 'b': 2}
기동시에 하려면 , 「 」를 합니다.c.StoreMagic.autorestore = Trueipython_config에 .파이다
다른 제안을 그릇에 담는 중입니다.스파이더
이력 로그와 변수 탐색기가 있습니다.MatLab과 함께 작업해 본 적이 있다면 유사점을 알 수 있을 것입니다.
%history명령어는 훌륭하지만 안타깝게도 %sech에 저장된 내용은 저장할 수 없습니다.는, 「이렇게」를 하지 않으면 안합니다.%logstart 처음에 (확인은 안 했지만)
제가 좋아하는 건
%history -o -n -p -f filename.txt
출력, 회선번호 및 '>>'이 각 입력 앞에 저장됩니다(o, n 및 p 옵션).%history에 대해서는, 여기를 참조해 주세요.
를 사용할 수 .script명령어를 사용하여 세션 전체를 기록합니다.의 it of of of of의 일부입니다.의 일부입니다.util-linux키키 、 Linux 、 합합합합합합 。 에일리어스 기능을 생성하여 에일리어스 할 수 .script -c python은 저장될 것이다.typescript파일입니다. 예를 들어, 여기 그런 파일의 전집이 있습니다.
$ cat typescript
Script started on Sat 14 May 2016 08:30:08 AM MDT
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello Pythonic World'
Hello Pythonic World
>>>
Script done on Sat 14 May 2016 08:30:42 AM MDT
여기서의 작은 단점은 다음과 같습니다.script백스페이스에 접속할 때마다 회선 분할까지 모든 것을 기록합니다. 여러분도 쓰시면 것 요.col출력을 청소합니다(Unix & Linux Stackexchange의 이 게시물을 참조).
다른 선택지가 있습니다 - pyslice."wxpython 2.8 docs 데모 및 도구"에는 "pyslices"라는 이름의 오픈 소스 프로그램이 있습니다.
에디터처럼 사용할 수 있습니다.또한 콘솔처럼 사용할 수 있습니다.각 행을 인터랙티브인터프리터처럼 즉시 에코로 실행할 수도 있습니다.
물론, 각 블록의 모든 코드 블록과 결과는 자동으로 txt 파일에 기록됩니다.
결과는 해당 코드 블록 바로 뒤에 기록됩니다.매우 편리합니다.

IPython에서는 먼저
In [2]: %hist
내 과거 코드를 볼 수 있습니다..my_file.py%%filemagic(의 줄임말)
In [3]: %%file my_file.py
...: # paste code here
...:
...:
마지막에는 두 번의 리턴을 때립니다.
하려면 옵션 을 합니다.-a%%file -a my_file.py.
필요한 경우 느낌표를 사용하여 기본 명령줄에 파일을 나열하거나 편집하거나 할 수 있습니다.
In [5]: !ls -l my_file.py
In [6]: !vi my_file.py
일부 댓글은 모든 IPython 입력을 한 번에 저장하는 방법을 묻고 있었습니다.IPython에서 %save 매직의 경우, 아래와 같이 모든 명령을 프로그래밍 방식으로 저장하여 프롬프트 메시지를 피하고 입력 번호를 지정하지 않아도 됩니다. currentLine = len(In)-1 %save -f my_displays 1-$CurrentLine
-f은 파일 하기 위해 파일 치환을 강제하기 위해 사용됩니다.len(IN)-1IPython을 사용합니다.이것에 의해, 세션 전체를 프로그래밍 방식으로 보존할 수 있습니다.
하시는 분spacemacs , , , , 입니다.ipythonpython-layer은 save magic "save magic" "save magic" "save magic" "second " 출력이
len(all_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all_substa'''))
len(all_substantives_w_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all'''))
';'.join(__PYTHON_EL_get_completions('''all_'''))
';'.join(__PYTHON_EL_get_completions('''all_w'''))
';'.join(__PYTHON_EL_get_completions('''all_wo'''))
';'.join(__PYTHON_EL_get_completions('''all_wor'''))
';'.join(__PYTHON_EL_get_completions('''all_word'''))
';'.join(__PYTHON_EL_get_completions('''all_words'''))
len(all_words_w_logograms)
len(all_verbs)
하십시오.「 」 、 「 」 、 「 ipython 」spc f s
bpython을 사용하는 경우 모든 명령어 이력은 기본적으로 에 저장됩니다.~/.pythonhist.
나중에 재사용할 수 있도록 명령을 저장하기 위해 python 스크립트 파일에 복사할 수 있습니다.
$ cp ~/.pythonhist mycommands.py
그런 다음 해당 파일을 편집하여 정리하고 Python 경로(글로벌 또는 가상 환경의 사이트 패키지, 현재 디렉토리, *.pth 또는 기타 방법)에 넣습니다.
셸에 명령을 포함하려면 저장된 파일에서 명령을 가져옵니다.
>>> from mycommands import *
리눅스 상에서 tmux를 통해 python 세션을 유지하는 다른 방법을 제안하고 싶습니다.tmux를 실행하여 연 세션에 자신을 첨부합니다(직접 연 후 첨부되지 않은 경우).python을 실행하여 실행 중인 작업을 수행한 후 세션에서 분리합니다. tmux 세션에서 분리해도 세션이 닫히지 않습니다.세션은 열린 상태로 유지됩니다.
이 방법의 장점: 다른 디바이스에서 이 세션에 접속할 수 있습니다(PC를 SSH할 수 있는 경우).
이 메서드의 단점: 이 메서드는 실제로 python interpreter가 존재할 때까지 열린 python 세션에서 사용되는 리소스를 포기하지 않습니다.
XUbuntu에 입력 및 출력을 저장하려면:
- XWindows에서 Xfce 터미널 앱에서 iPython을 실행합니다.
- 를 클릭합니다.
Terminal위 in in 위 、 메 、 메 、 습 、 습 、 in in in in in in in in in 。save contents
이렇게 하면 입력과 출력이 저장되고 터미널을 열었을 때부터 계속됩니다.이는 ipython 고유하지 않으며 터미널 창에서 실행되는 ssh 세션 또는 기타 작업과 함께 작동합니다.
내장 함수를 open으로 사용할 수 있습니다.예를 들어 계산기 등 일부 이력을 저장해야 하는 모든 프로그램에서 사용합니다.
#gk-test.py or anything else would do
try: # use the try loop only if you haven't created the history file outside program
username = open("history.txt").readline().strip("\n")
user_age = open("history.txt").readlines()[1].strip("\n")
except FileNotFoundError:
username = input("Enter Username: ")
user_age = input("Enter User's Age: ")
open("history.txt", "w").write(f"{username}\n{user_age}")
#Rest of the code is secret! try it your own!
제 댓글을 좋아해 주신 모든 분들께 감사드립니다!읽어주셔서 감사합니다!
언급URL : https://stackoverflow.com/questions/947810/how-to-save-a-python-interactive-session
'programing' 카테고리의 다른 글
| SQL: 두 테이블에서 세 번째 테이블과 관련된 데이터를 선택합니다. (0) | 2023.01.04 |
|---|---|
| Vuetify Nuxt.js : 이미지 태그에 URL 링크를 추가하는 방법 (0) | 2023.01.04 |
| set Timeout 또는 set Interval? (0) | 2023.01.04 |
| Java에서 휘발성과 동기화의 차이 (0) | 2023.01.04 |
| Maria에서 느린 업데이트, 삭제 및 쿼리 삽입DB (0) | 2023.01.04 |
