3

私の Python 履歴ファイルは ~/.pyhistory にあり、次の内容が含まれています。

from project.stuff import *
quit()
from project.stuff import *
my_thing = Thing.objects.get(id=21025)
my_thing
my_thing.child_set.all()
my_thing.current_state
my_thing.summary_set
my_thing.summary_set.all()
[ x.type for x in my_thing.child_set.all() ]
[ x.type for x in my_thing.child_set.all().order_by( 'datesubmitted' ) ]
quit()

virtualenv と virtualenvwrapper を使用して仮想環境を構築しています。今日、readline が履歴ファイルを読み取らないという問題が発生しています。

>>> historyPath
'/Users/johndoe/.pyhistory'
>>> readline.read_history_file(historyPath)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory

ファイルは私が読み書きできます:

[johndoe@here]# ls -l ~/.pyhistory
-rw-------  1 johndoe  somegroup  325 21 Sep  2012 /Users/johndoe/.pyhistory

この問題の原因は何ですか?

4

1 に答える 1

22

履歴ファイルのバージョンが古いようです。これを後のバージョンの readline で期待される形式に変換してみてください。最も顕著なのは、最初の行を文字どおり '_HiStOrY_V2_' にし、すべてのスペースを '\040' に置き換える必要があることです。

_HiStOrY_V2_
from\040project.stuff\040import\040*
quit()
from\040project.stuff\040import\040*
my_thing\040=\040Thing.objects.get(id=21025)
my_thing
my_thing.child_set.all()
my_thing.current_state
my_thing.summary_set
my_thing.summary_set.all()
[\040x.type\040for\040x\040in\040my_thing.child_set.all()\040]
[\040x.type\040for\040x\040in\040my_thing.child_set.all().order_by(\040'datesubmitted'\040)\040]
quit()

これが基礎となる readline/libedit ライブラリの癖なのか、Python readline モジュールの癖なのかはわかりませんが、これでうまくいきました。

于 2013-07-24T03:50:03.660 に答える