2

ターミナルで Python インタラクティブ プロンプトを実行し、新しいモジュールをインポートして機能をテストすることで、開発中に Python モジュールをテストすることがあります。もちろん、私のコードは開発中なので、バグがあり、インタープリターを頻繁に再起動する必要があります。再起動する前にインタープリターを数行実行しただけであれば、これはそれほど苦痛ではありません: インタープリターを再起動するときのキー シーケンスは次のようUp Up Enter Up Up Enterになります。

もちろん、テスト コードを で実行するスクリプトに入れることもできますpython -iが、これは非常にスクラッチ アクティビティであるため、テキスト エディターを開くには「しきい値を超えている」とは思えません :) Ctrl-rbash シェルからの動作: bash で一連の 10 個のコマンドを順番に実行するには、履歴でコマンドを検索し (繰り返しUpまたはCtrl-r検索 - どちらも Python インタープリター シェルで機能します)、Ctrl-o10 回押すだけです。私のお気に入りの bash シェル機能の 1 つです。

Ctrl-a問題は、Ctrl-e、 、Ctrl-r、 などの他の多くの readline バインディング機能Ctrl-sが Python インタープリターで機能する一方で、機能Ctrl-oしないことです。このモジュールを使用してこの機能をプロンプトに追加できる可能性がありますが、オンラインでこれへの参照を見つけることができませんでした助言がありますか?readlinepython

編集:はい、インタラクティブなインタープリターを使用することは、数行を超えてスケ​​ーリングする開発方法論ではないことを知っています! しかし、小規模なテストには便利です。IMO のインタラクティブ性は、開発中の API が自然で便利かどうか、または重すぎるかどうかを判断するのに役立ちます。そのため、この方法で (場合によっては) 選択すべきか選択すべきでないかという副次的な意見ではなく、Python で readline の履歴ステッピングを機能させることができるかどうかという技術的な質問への回答を限定してください!

編集:投稿して以来、私はすでにreadlineモジュールを使用して、いくつかの Python インタープリター履歴関数を機能させていることに気付きました。しかし、自分のファイルを入れても、readline コマンドへの Ctrl-o バインディングはoperate-and-get-nextサポートされていないようです。readline.parse_and_bind("Control-o: operate-and-get-next")PYTHONSTARTUP

4

4 に答える 4

4

ターミナルで Python インタラクティブ プロンプトを実行し、新しいモジュールをインポートして機能をテストすることで、開発中に Python モジュールをテストすることがよくあります。

このパターンの使用をやめて、テスト コードをファイルに書き始めると、作業がずっと楽になります。

  • いずれにせよ、そのファイルを実行すると問題が少なくなります。

  • 結果を読み取るのではなく、チェックを自動化すると、コードのチェックが速くなり、エラーが発生しにくくなります。

  • 完了したらそのファイルを保存し、コードや環境を変更するたびに実行できます。

  • テストしていないコードの部分がないことを確認するなど、テストでメトリックを実行できます。

unittest モジュールに精通していますか?

于 2012-10-05T12:14:37.673 に答える
1

python-ideas リストに関するいくつかの議論の後、私自身の質問に答えます。いくつかの readline ドキュメントの矛盾した情報にもかかわらず、operate-and-get-next関数は実際には、コア readline ではなく、readline の bash 拡張機能として定義されているようです。

そのため、Python インタープリター セッションでモジュールをCtrl-oインポートするときも、このバインドを手動で強制しようとするときも、既定では期待どおりに動作しreadlineません。バインドする関数が readline ライブラリに存在しません。

Google 検索でhttps://bugs.launchpad.net/ipython/+bug/382638が明らかになり、GNU readline メンテナーは、この機能をコア readline に追加しない理由を示し、呼び出し元のアプリケーションで実装する必要があると述べています。readline彼はまた、「その実装は複雑ではありません」と述べていますが、モジュールの動作に対する純粋な Python 拡張としてこれを行う方法 (または可能かどうか) は明らかではありません。

operate-and-get-nextいいえ、 bash の関数が Pythonreadlineモジュールまたはインタープリター自体に明示的に実装されていない限り、これは現時点では不可能です。

于 2012-10-08T13:15:30.037 に答える
0

これはあなたの質問に対する正確な回答ではありませんが、それがあなたの開発スタイルである場合は、DreamPieを見たいと思うかもしれません。さまざまな便利なショートカットを提供する Python ターミナル用の GUI ラッパーです。これらの 1 つは、インタープリター表示全体でドラッグして選択し、コードのみ (出力ではなく) をコピーする機能です。その後、このコードを貼り付けて、再度実行できます。これは、あなたが説明するワークフローのタイプに便利です。

于 2012-10-07T21:42:22.657 に答える
0

あなたの最善の策は、そのプロジェクトをチェックすることです: http://ipython.org

Ctrlこれは+を使った履歴検索の例ですR:

ここに画像の説明を入力

編集 実行中debianまたは派生している場合:

sudo apt-get install ipython
于 2012-10-07T22:07:31.030 に答える