Ipython: 最初のインポート後の奇妙なキャラクター

作成日 2018年09月27日  ·  33コメント  ·  ソース: ipython/ipython

私はpython7.0.1を実行しています。すべてが正常に機能しているようですが、最初のインポート後、一貫して奇妙な記号が表示されます(添付のスクリーンショットを参照)。 もう一度Enterキーを押すと、記号が消えて再表示されません。 Macのiterm2ターミナルでフィッシュシェルを使用しています。

screenshot 2018-09-27 at 13 51 00

[更新]

prompt_toolkitを2.0.6にアップグレードすると、問題が修正されます。

help wanted

全てのコメント33件

うーん、これを見たことがありますが、 ^[[43;1Rが、ターミナルエミュレータのマスターを使用していることが原因だと思いました。 これがどこから来たのかわからない

最新のhttps://github.com/jonathanslenders/pymuxでも同様のことが@jonathanslendersはいくつかのアイデアを持っていますか?

私は同じようになります:

$ ipython
Python 3.6.5 (default, Mar 30 2018, 06:41:53) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import os                                                                                             

^[[19;1RIn [2]:

次にタブを完成させようとすると:

In [2]: os.p                                                                                                  
os.pardir         os.pathconf       os.pathsep        os.popen          os.putenv         
os.path           os.pathconf_names os.pipe           os.pread          os.pwrite         
^[[19;1RIn [2]: os.p

これにより、タブ補完がほとんど使用できなくなります。

これは次のコミットによって修正された可能性があります: https
これはprompt_toolkitmasterにマージされていますが、これを含む新しいprompt_toolkit2.0をリリースしようとしています。

マスターからprompt-toolkitをインストールしましたが、まだ問題があるようですが、ipython側で他に何かを行う必要があるかどうかはわかりません。

いいえ、これはIPythonではないと確信しています。 iterm2で再現してみます

ここでの複雑さを理解していないと確信していますが、参考までに、これはIPython 7.0および7.1で発生し、6.0または6.5では発生せず、同じvirtualenvでテストします。

どのターミナルで見たのか投稿できますか?
iTerm2 – 3.2.1beta6 –osxで再現できます。 alacritty v0.2.0-35-ga53cabf osxですが、裸のmacos terminal.app(sierra 10.12.6)にはありません

ターミナルの宣伝された機能と実際にできることの不一致でしょうか?

また、 ipython --colors=nocolorでは(私には)再現できません

High Sierra10.13.6のTerminal.appをむき出しにするだけです。 nocolorは私のためにそれを修正しません。

また、 ipython --colors=nocolorでは(私には)再現できません

それを傷つけてください、それはランダムに見えます、しかし確かに、nocolorはそれを修正しませんでした。

このpatch_stdoutコンテキストマネージャーを削除し

私がそれを削除した場合、それは私には問題ないように見えます、そして私が余分にフラッシュ標準出力を使用した場合、私は問題を2回受けます..

コンテキストマネージャーを削除すると、修正されたようです。

これは、macOSTerminal.appとiTerm2のどちらでも発生します。 ただし、このキャラクターはiTerm23.2.1betaで一貫して登場しました。 今朝、3.2.2beta1にアップグレードしたところ、文字が表示されてすぐに消えて、通常のiPythonプロンプトに置き換えられたようです。 しかし、少なくとも1つのケースでは、キャラクターが永続的であり、違いが何であったかはわかりません。

うん、私もそれを修正します。 その効果は私にとって常に一貫していた。

@jonathanslendersは、パッチstdoutに競合状態があり、フラッシュが発生する前にstdout / errが復元され、

patch_stdoutのrawパラメータは、ptkコードでもどこにも行かないようです。

したがって、これを行う理由があります。そうしないと、バックグラウンドスレッドで印刷するとレンダリングが台無しになりますが、(私には)キャプチャされたstderr / outをフラッシュしてから初期値に戻すまでの競合状態です。

バグをローカライズしたのか、まだ実験中なのかはわかりませんが、参考までに:

  • macOS 10.13.6
  • iTerm 3.2.1-最初の入力(インポート、式、空白行も含む)の後に常に^[[41;1Rを表示します
  • Terminal.app 2.8.2(404)-正常に動作します!
Python 3.7.0 (default, Sep 18 2018, 18:47:22)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

^[[41;1RIn [1]:

私もこれ(macOS 10.11.6、iTerm 3.2.0beta5)を非常に頻繁に取得していますが、100%の時間ではなく、 43;1Rシーケンスを使用しています。

Python 3.7.0 (default, Jun 29 2018, 20:13:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import sqlalchemy

^[[43;1RIn [2]:

ええ、これは本当に私を殺しています。 ダウングレードしますが、Jupyterノートブックが壊れます。 私にとって、これらの文字は非常に頻繁に表示されるため、タブ補完は多かれ少なかれ完全に壊れています。

残念ながら、現時点ではreadlineはオプションではありません: https

prompt_toolkit (バージョン2.0.5)の現在のマスターを実行している変更はありません。

再現できます。

iTerm2ビルド3.2.3(私は最新だと思います)、IPython 7.0.1、Python3.6.1。

UbuntuのPython3.6.3にバグがあり、Python 3.7でバグがなくなりましたが、いくつかの不具合が見られます(文字が印刷されてすぐに削除されるなど)。

ここで修正があります: https

実際、このコミットで見られるのは、両方とも問題を解決する2つの個別の修正です(私が再現できるものについて)。

  • 何らかの理由で、最初の入力を受け入れる直前に、空の文字列がキャプチャされてstdoutに書き込まれます。 これにより、patch_stdoutコードがトリガーされました。 実際には、空の文字列を出力するためだけに、プロンプトを消去して再度描画する必要はありませんでした。 (私はまだこれが実際に起こっている理由を確認する必要があります。)

  • 実際の修正は、キャプチャされたコンテンツをレンダリングする前にCPR応答を待つことです。 CPRは非同期で機能します。 stdoutに何かを書き込んでカーソル位置を要求すると、stdinの端末から応答を受け取ります。 常に少し遅れがあります。 ただし、端末をRAWモードに保ち、この応答が到着するまでこの入力を読み取ることが重要です。 私たちはそれをしませんでした、そしてそれはカーソル位置で端末自身の応答をレンダリングしました。

タイミングは端末間で少し違うはずですが、そうなるはずです。

最新のprompt_toolkitcommitを試してみてください。 それが機能する場合は、新しいリリースをプッシュします。

それは私の側のバグを修正します。 ありがとう@jonathanslenders

はい、ありがとうございます。最新のマスターが私にも修正してくれます。

そのパッチは私も持っていたいくつかの[[39;1R文字を修正します。 ありがとう!

編集:それをスクラッチします。 私は間違ったバージョンをテストしていました。 はい、これは私にとってもそれを修正するようです。


いいえ、これで修正されないようです。 代わりに私は別のキャラクターを取得します

AlbireoProˇalbireo: Downloads » ipython                 (3.7.0 2.7.15)

In [1]: from can.interfaces.slcan import slcanBus

^[[21;1RIn [2]:

最新のprompt_toolkitcommitを試してみてください。 それが機能する場合は、新しいリリースをプッシュします。

私のために働きます。 また、色の処理をAFAICTに変更します。これは、IPythonの一部の場所でANSIコードへのANSIマッピングに依存していなかったため、これも修正します。 ありがとう!

@Carreau
IPythonは、256色モードであっても、特定のRRGGBBシーケンスが特定のANSI色にマップされることを期待していますか?

ちなみに、 @ Carreauのprompt_toolkitの機能の1つは、色の明るさを増減する機能です。 これにより、背景が明るいまたは暗い端末に簡単に調整できます。 これを(インタラクティブに)テストするためにptpythonのメニューに追加しましたが、かなりうまく機能します。

期待する

「期待する」とは言いませんが、テーマは#ansixxx#00ff00が混在しているようで、見栄えがよく、2.0.6では違いが少し強くなっています。

screen shot 2018-10-12 at 10 03 56

#ansi#hexどちらを使用するかについては、もっと一貫性が必要だと思います。

ある時点で明るさのオプションを見ていきます。 私は数週間前に新しいポジションを開始したばかりで、IPython / jupyter自体の開発に少し時間がかかります。

興味深いですが、それは理にかなっています。 色が#00ff00として定義されている場合、256カラーパレットから最も近い色を調べますが、16のANSIカラーを除外しています。 つまり、残りの240色から最も近い色を取ります。

その理由は、最近の人々はANSIカラーに対してカスタムカラースキームを定義していることが多いためですが、残りの240カラーに対しては定義されていません。 ですから、あなたの状況では少しずれているかもしれませんが、実際には他の人にとっては実際の色にはるかに近いかもしれません。

基本的なANSIカラーがさまざまな端末でどのようにレンダリングされるかの例を次に示します。
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

上流で固定として閉じる

このページは役に立ちましたか?
0 / 5 - 0 評価