Pythonをインタラクティブに実行した後、OS-X端末の動作がおかしい


11

os-xターミナルでpython repl(2.7.10)を実行して終了した後、ターミナルはタイプされた入力をエコーし​​なくなり、その他の奇妙なことが起こります。pythonもう一度実行するとexit()、ターミナルは復元されたようです。タブを閉じて新しいタブを開くだけなので、それを広範囲にテストしたことはありません。

これは端末の設定に関連していると思いますが、これは最近のものであり、覚えていることは何も変更していません。macportsいくつかのコンソールライブラリとの依存関係の不一致に関係がある場合、Pythonはとともにインストールされます。2.7.10は少し前にインストールされましたが、インストール後には発生しませんでした。

ナックルクラックして開くterminal

[~]: virtualenv-2.7 venv-test
[~]: source venv-test/bin/activate
[~]: python
>>> ^D>>>       *(press ctrl-d, the 2nd >>> is strange)
[~]:            *(type something like `ls-l`, nothing shows on console)
[~]: -bash: ls-l: command not found`

さらに、Pythonを再度実行しctrl-d、次の出力結果をヒットします。

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 

Pythonをmacports経由でインストールするのはなぜですか?Python v2.7.10はEl Capに含まれており、Yosemiteと思います... Mac Portsから特に得ているものはありますか?
ベンジャミンショルニック

まあ、2.7.macに同梱されていたものよりも大きいものを使用します。システムpython(Unixの標準問題)に触れず、2.7でコンパイルされたカスタムGISオプション、それらのパッケージmgmt、および同時に3.4を実行します。しかし、それを行うべき本当の理由は、システムpythonでfsckしないことです。
アンドリューバッカー

Pythonアプリケーションは何らかのウィンドウ管理を行っていますか?(例:呪い、NCursesなどを使用)
ベンジャミンショルニック

何のアプリケーション、ちょうどタイピングはありませんpython、その後とctrl-d
アンドリュー・バッカー

回答:


12

この問題に関するMacPortsには未解決のバグがあります。

https://trac.macports.org/ticket/48807

「+ readline」オプションを使用してpythonをインストールすると問題が修正されると言われています。

sudo port uninstall python27
sudo port install python27 +readline

9
くそー、そのバグレポートを見つけてくれてありがとう。FWIW、python27をアンインストールすることはできません(通常、依存するパッケージが多すぎます)。そのため、代わりに再構築する必要があります。を実行しますsudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline。ローカルツリーが古くなっている場合、利用可能な+ readlineバリアントはありません。これでselfupdate修正されます。
アンドリューバッカー

8

端末モードは、アプリケーションによってrawまたはcbreakに設定され、異常終了するとモードは復元されません。特に、Enterキー(control / M別名キャリッジリターン)を改行(control / J別名改行)にマップする機能は、多くの場合この場合無効になります。次のように入力して、返品に関する問題を修正できます。

stty sane

に続く controlJ

少なくともコマンドを再入力できるようになりますが、などの編集文字backspaceは通常の機能に割り当てられない場合があります。

resetコマンドの使用を勧める人もいますが、特定の症状はそのプログラムの動作とは関係ありません。

さらに読むために


stty echo問題を修正しているようです(stackoverflow.com/questions/32475928/python3-messes-up-terminal)。それがすべてを処理するかどうかはわかりません。構文エラーは、新しいコマンドの入力を開始するために手動で改行を押す必要があるため、私のPythonでは少し間違っていると思いますが、そうではないはずです。
アンドリューバッカー

これで問題は解決しませんが、少なくとも事後に問題を解決できます。今のところ、それで十分です。なぜこれが起こっているのを知る方法があれば、私は知りたい。
アンドリューバッカー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.