443

私は、データベースやファイルなどを操作するために Python のインタープリターを頻繁に使用していることに気づきました。必要な頻度で、有用なビットを適切に保存およびクリーンアップしていません。入力をシェルに保存する方法はありますか (db 接続、変数の割り当て、少しの for ループとロジックのビット) -- インタラクティブ セッションの履歴はありますか? 次のようなものを使用すると、scriptstdout ノイズが多すぎます。すべてのオブジェクトをピクルする必要はありませんが、それを行うソリューションがあれば問題ありません。理想的には、インタラクティブに作成したスクリプトと同じように実行されるスクリプトを残しておいて、必要のないビットを削除するだけで済みます。これを行うパッケージ、または DIY アプローチはありますか?

4

20 に答える 20

436

IPythonは、インタラクティブなセッションを使用したい場合に非常に便利です。たとえば、ユースケースにはマジック%saveコマンド%save my_useful_session 10-20 23があります。入力行10から20および23を保存するために入力するだけですmy_useful_session.py(これを支援するために、すべての行に番号が付けられます)。

さらに、ドキュメントには次のように記載されています。

この関数は、入力範囲に対して%historyと同じ構文を使用し、指定したファイル名に行を保存します。

これにより、たとえば、次のような古いセッションを参照できます。

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

プレゼンテーション ページのビデオを見て、機能の概要を簡単に把握してください。

于 2009-06-03T23:34:21.330 に答える
193

Andrew Jones の Web サイト (アーカイブ済み) から:

import readline
readline.write_history_file('/home/ahj/history')
于 2012-03-15T13:06:35.877 に答える
98

それを行う方法があります。ファイルを保存~/.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 プラットフォームでのみ利用可能です。

于 2009-06-03T23:23:20.947 に答える
77

IPythonを使用している場合は、魔法の関数%history-fパラメータ peを使用して、以前のすべてのコマンドをファイルに保存できます。

%history -f /tmp/history.py
于 2015-04-30T17:56:37.033 に答える
21

Ipythonをインストールした後、次のコマンドを実行して Ipython セッションを開きます。

ipython

コマンド ラインから、次の Ipython 'magic' コマンドを実行するだけで、Ipython セッション全体を自動的にログに記録できます。

%logstart

これにより、一意の名前の .py ファイルが作成され、後でインタラクティブな Ipython セッションとして使用したり、選択したスクリプトで使用したりするためにセッションが保存されます。

于 2014-10-30T21:12:47.807 に答える
14

また、reinteractは、Python セッションへのノートブックのようなインターフェイスを提供します。

于 2009-06-04T00:28:21.567 に答える
3

ボウルに別の提案を入れるだけです: Spyder

ここに画像の説明を入力

履歴ログ変数エクスプローラーがあります。MatLab を使用したことがある場合は、類似点がわかります。

于 2012-05-06T21:25:47.880 に答える
3

この%historyコマンドは素晴らしいですが、残念ながら %paste されたものを sesh に保存することはできません。%logstart そのためには、最初に行う必要があると思います(ただし、これが機能することは確認していません)。

私がやりたいことは

%history -o -n -p -f filename.txt

これにより、各入力の前に出力、行番号、および「>>>」が保存されます (o、n、および p オプション)。%history のドキュメントはこちらを参照してください。

于 2017-04-19T19:43:32.623 に答える
2

Linux に関する限り、scriptコマンドを使用してセッション全体を記録できます。これはutil-linuxパッケージの一部であるため、ほとんどの Linux システムにあるはずです。script -c python呼び出してファイルに保存されるエイリアスまたは関数を作成できtypescriptます。たとえば、これはそのようなファイルの 1 つの転載です。

$ 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 に関するこの投稿を参照してください)。

于 2016-05-14T14:45:52.523 に答える
1

IPythonでは、最初に使用します

In [2]: %hist

私の過去のコードを表示します。保存したいチャンクを選択し、マジック (の略)my_file.pyを使用してファイルに貼り付けます。%%file%%writefile

In [3]: %%file my_file.py
   ...: # paste code here 
   ...:  
   ...:  

最後にリターンを2回打った。

ファイルに追加するには、オプション-a:を使用します%%file -a my_file.py

必要に応じて、感嘆符を使用して、基になるコマンド ラインでファイルを一覧表示、編集などできます。

In [5]: !ls -l my_file.py
In [6]: !vi my_file.py
于 2020-07-17T07:22:22.460 に答える
0

一部のコメントは、すべての IPython 入力を一度に保存する方法を尋ねていました。IPython の %save マジックの場合、以下に示すようにすべてのコマンドをプログラムで保存して、プロンプト メッセージを回避し、入力番号の指定を回避できます。currentLine = len(In)-1 %save -f my_session 1-$currentLine

この-fオプションはファイルの置換を強制するために使用されlen(IN)-1、IPython で現在の入力プロンプトが表示されるため、セッション全体をプログラムで保存できます。

于 2016-07-26T15:14:54.853 に答える