私は、データベースやファイルなどを操作するために Python のインタープリターを頻繁に使用していることに気づきました。必要な頻度で、有用なビットを適切に保存およびクリーンアップしていません。入力をシェルに保存する方法はありますか (db 接続、変数の割り当て、少しの for ループとロジックのビット) -- インタラクティブ セッションの履歴はありますか? 次のようなものを使用すると、script
stdout ノイズが多すぎます。すべてのオブジェクトをピクルする必要はありませんが、それを行うソリューションがあれば問題ありません。理想的には、インタラクティブに作成したスクリプトと同じように実行されるスクリプトを残しておいて、必要のないビットを削除するだけで済みます。これを行うパッケージ、または DIY アプローチはありますか?
20 に答える
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/
プレゼンテーション ページのビデオを見て、機能の概要を簡単に把握してください。
Andrew Jones の Web サイト (アーカイブ済み) から:
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をインストールした後、次のコマンドを実行して Ipython セッションを開きます。
ipython
コマンド ラインから、次の Ipython 'magic' コマンドを実行するだけで、Ipython セッション全体を自動的にログに記録できます。
%logstart
これにより、一意の名前の .py ファイルが作成され、後でインタラクティブな Ipython セッションとして使用したり、選択したスクリプトで使用したりするためにセッションが保存されます。
また、reinteractは、Python セッションへのノートブックのようなインターフェイスを提供します。
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 に関するこの投稿を参照してください)。
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
一部のコメントは、すべての IPython 入力を一度に保存する方法を尋ねていました。IPython の %save マジックの場合、以下に示すようにすべてのコマンドをプログラムで保存して、プロンプト メッセージを回避し、入力番号の指定を回避できます。currentLine = len(In)-1 %save -f my_session 1-$currentLine
この-f
オプションはファイルの置換を強制するために使用されlen(IN)-1
、IPython で現在の入力プロンプトが表示されるため、セッション全体をプログラムで保存できます。