web-dev-qa-db-ja.com

新しいmsys-gitターミナルのインタラクティブモードでpythonを使用できませんか?

最近、32ビットのWin7を実行しているラップトップをアップグレードしました。新しいラップトップは64ビットのWin7インストールを実行しています。

Git-scm.comからgit2.5.1をインストールしており、最新のpythonバージョン(3.4.3と2.7.10の両方)。

インストール中に、以前はインストールに付属していなかった新しい(デフォルトの)端末を使用することを選択し、インストールの完了後に端末を起動します。ただし、pythonと入力すると、出力が表示されません(Enterキーを押すとカーソルが次の行に移動します)。

print('hello world')などのpythonコマンドを入力しようとしましたが、a.4のようなものを入力すると、構文エラーしか出力されません。 pythonは実行されていますが、出力がありません。これは、実行しているpythonのどちらのバージョンでも発生します。

Pythonは代替のWindowscmdベースのgitで正常に実行されているようですが、通常のコンソールラッパーであるConsole2が正しく機能していないようであるため、コピー/貼り付けを簡単に行うことができません。

Msysコンソールが機能しない理由、またはこれを修正する方法について何か考えはありますか?

4
Casey Kuball

インストールウィザードから:

"Windows console programs (such as interactive Python) must be launched via <code>winpty</code> to work in MinTTY`

MSys2/Gitに付属のMinTTYターミナルを使用する場合は、winptyを使用してPython)のようなコンソールプログラムを起動する必要があります。

Git for Windows 2.7.1の時点で、Winptyはそのままで含まれており、次のように実行できます。

winpty /path/to/python.exe

winptyはGit\usr\binにインストールされています。

または、いつでもbashエイリアスを使用して、必要な処理を実行できる関数を.bashrcに作成できます。この新しい制限を回避するための私の解決策は次のとおりです。

function maybe_python34() {
    if [ $# -eq 0 ]; then
        /c/Python34/python.exe -i
    else
       /c/Python34/python.exe $@
    fi
}

alias python=maybe_python34

pythonインタラクティブモードで、矢印キーを使用してコマンド履歴を取得することに関連するいくつかの問題があることに注意してください。

6
Casey Kuball

GitはMsysを利用していますが、今ではもっと良いものがあります Msys2

それを使用し、Git-SCMがMsys関連に行った変更.profile.bashrc私に行く方法のようです。

PacmanでMsys2を簡単にアップグレードできるようになりました

pacman -Syuu
pacman -S winpty

Gitはwinptyの素敵なエイリアスを追加しました:

case "$TERM" in
xterm*)
    # The following *.exe programs are known to require a Win32 Console
    # for interactive usage, therefore let's launch them through winpty
    # when run inside `mintty`.
    for name in node python ipython php php5 psql
    do
        case "$(type -p "$name".exe 2>/dev/null)" in
        ''|/usr/bin/*) continue;;
        esac
        alias $name="winpty $name.exe"
    done
    ;;
esac

プロンプトでGitブランチを表示するには、Gitの人々がプロンプトを入れたファイルをコピーして.bashrc.git-Prompt.sh

if test -f /etc/profile.d/git-sdk.sh
then
    TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
    TITLEPREFIX=$MSYSTEM
fi

PS1='\[\033]0;$TITLEPREFIX:${PWD//[^[:ascii:]]/?}\007\]' # set window title
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'\[\033[32m\]'       # change to green
PS1="$PS1"'\u@\h '             # user@Host<space>
PS1="$PS1"'\[\033[35m\]'       # change to purple
PS1="$PS1"'$MSYSTEM '          # show MSYSTEM
# PS1="$PS1"'\[\033[33m\]'     # change to brownish yellow
PS1="$PS1"'\[\033[34m\]'       # change to pale blue
PS1="$PS1"'\w'                 # current working directory
if test -z "$WINELOADERNOEXEC"
then
    GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
    COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
    COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
    COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
    if test -f "$COMPLETION_PATH/git-Prompt.sh"
    then
        . "$COMPLETION_PATH/git-completion.bash"
        . "$COMPLETION_PATH/git-Prompt.sh"
        PS1="$PS1"'\[\033[36m\]'  # change color to cyan
        PS1="$PS1"'`__git_ps1`'   # bash function
    fi
fi
PS1="$PS1"'\[\033[0m\]'        # change color
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'$ '                 # Prompt: always $
MSYS2_PS1="$PS1"               # for detection by MSYS2 SDK's bash.basrc
4
Brad Sturtevant