40

新しい Windows システムをインストールして、CygWin と 64 ビット Python (2.7.3) をデフォルトの場所 (c:\cygwinおよび c:\Python27\python) にインストールし、CygWin ビンと Python ディレクトリの両方をパス (ユーザー変数 PATH 内) に追加しました。通常のコマンド ウィンドウからは Python は完全に起動しbashますが、CygWin 環境から呼び出すとハングし、入力プロンプトが表示されません。

以前は他のマシンでこれを行ったことがありますが、常に古いバージョンの Python (32 ビット) と CygWin を使用し、明らかに非標準の場所にある Python を使用していました。他の誰かがこの問題を抱えていましたか、または誰かが原因を教えてもらえますか?

4

8 に答える 8

56

これを試して

python -i

そして、はい、あちこちでいくつかの不具合を見つけるでしょう!!!

オプションは、こちら-iの Python ヘルプpython -hページに示されているように、対話型のプロンプトを強制します。

$ python -h
-i  : inspect interactively after running script; 
      forces a prompt even if stdin does not appear to be a terminal;
      also PYTHONINSPECT=x
于 2013-09-07T17:17:29.377 に答える
43

問題は、Cygwin 端末 (MinTTY) の動作方法が原因で、Python のネイティブ Windows ビルドが stdout が端末デバイスであることを認識しないことです。つまり、stdout はパイプであると見なされるため、代わりに非対話モードで実行されます。対話モードの場合、行バッファリングではなく、出力を完全にバッファリングします。

これが新しい理由は、以前の Cygwin インストールでは MinTTY がなく、使用された端末が標準の Windows 端末であったためと考えられます。

これを修正するには、通常の Windows ターミナルから Python を実行するか ( Cmd.exe)、Python のネイティブ Windows ビルドではなく Cygwin バージョンの Python をインストールする必要があります。Cygwin バージョン (Cygwin の 経由でパッケージとしてインストール可能setup.exe) は、Cygwin 端末を理解し、MinTTY を介して実行すると適切に動作します。

必要な Python の特定のバージョンが Cygwin パッケージとして入手できない場合は、Python のソース コードをダウンロードして、Cygwin でビルドすることもできます。まだ Cygwin コンパイラ ツールチェーン (GCC) を持っていない場合は、Cygwin コンパイラ ツールチェーンが必要になりますが、標準./configure && make && make installコマンドでコンパイルする必要があると思います。

于 2012-11-27T16:45:06.453 に答える
11

Mercurial (hg)+OpenSSH、Python、および MinTTY で同様の問題が発生しましたが、CygWin ではなく MSYS で発生しました。それにもかかわらず、私が知る限り、これと私の問題は両方とも、MinTTY がネイティブの Windows コンソール機能を使用するアプリケーションを処理しないことが原因でした (Adam による回答で、彼は Python について詳しく説明しています)。

私にとっては、https://code.google.com/p/mintty/issues/detail?id=56#c64のコメント 64 にある解決策に従いました。

winpty ( https://github.com/rprichard/winpty )プロジェクトをコンパイルし、私のパスで、特別なビルドやスイッチ (. python -i. orコマンドの前にconsole.exeorを追加するだけで済みました。便宜上、 などのエイリアスを追加して、Linux シェルでも Windows MinTTY bash シェルでも同じコマンドを使用できるようにしました。consolepythonhgalias hg="console.exe hg"

また、このソリューションは、python や hg 以外のネイティブ アプリケーションでも機能するようです。たとえば、mysql( を使用しても使用しなく-pても) を実行すると、同じ問題が発生します (たとえば、入力プロンプトなしで「ハング」します)。それに追加consoleすると、通常どおりに許可されました。

于 2014-04-19T00:18:09.347 に答える
2

https://stackoverflow.com/a/9549255/745913によると、試すこともできます

/cydrive/c/Python27/python.exe -i foo.py
于 2013-04-15T19:27:23.300 に答える