Nie można używać Pythona w trybie interaktywnym na nowym terminalu msys-git?

4

Niedawno uaktualniłem laptopa, który miał 32-bitową wersję Win7, a mój nowy laptop ma 64-bitową instalację Win7.

Instaluję git 2.5.1 z git-scm.com i najnowsze wersje Pythona (zarówno 3.4.3, jak i 2.7.10).

Podczas instalacji wybieram użycie nowego (domyślnego) terminala, który nie był wcześniej dostarczany z instalacją, i uruchamiam terminal po zakończeniu instalacji. pythonJednak podczas wpisywania nie widzę żadnych danych wyjściowych (kursor przechodzi do następnego wiersza po naciśnięciu klawisza Enter).

Próbowałem wprowadzić polecenia w języku Python, takie jak print('hello world'), a jedynym wyjściem, jaki mogę uzyskać, jest błąd składniowy, jeśli wpisuję coś takiego a.4. Wygląda na to, że Python działa, ale nie otrzymuję żadnych danych wyjściowych. Dzieje się tak w przypadku dowolnej wersji Pythona, którą uruchamiam.

Wygląda na to, że Python działa normalnie z alternatywnym gitem opartym na Windows cmd, ale moje normalne opakowanie konsoli, Console2 nie działa poprawnie, więc nie mogę z nim łatwo kopiować / wklejać.

Masz pomysł, dlaczego konsola msys nie działa lub jak to naprawić?

Casey Kuball
źródło

Odpowiedzi:

6

W kreatorze instalacji:

„Programy konsoli Windows (takie jak interaktywny Python) muszą być uruchomione przez <code> winpty </code>, aby działać w MinTTY`

Jeśli chcesz korzystać z terminala MinTTY dostarczanego z MSys2 / Git, musisz uruchamiać programy konsolowe, takie jak Python, używając Winpty.

Począwszy od Git dla Windows 2.7.1, Winpty jest dołączany od razu i można go uruchomić w następujący sposób:

winpty /path/to/python.exe

Winpty można znaleźć zainstalowane na Git\usr\bin

Alternatywnie, zawsze możesz użyć aliasingu bash, aby napisać funkcję w .bashrc, która może zrobić, co chcesz. Oto moje rozwiązanie obejścia tego nowego ograniczenia:

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

alias python=maybe_python34

Zauważ, że istnieją pewne problemy związane z używaniem klawiszy strzałek do pobierania historii poleceń w interaktywnym trybie Pythona.

Casey Kuball
źródło
4

Git wykorzystuje Msys, a teraz jest lepszy, Msys2 !

Używanie go i modyfikacje, które Git-SCM dokonane Msys związane .profile, .bashrcwydaje się, że droga do mnie.

Teraz możesz łatwo zaktualizować Msys2 za pomocą Pacmana

pacman -Syuu
pacman -S winpty

Git dodał miły alias dla 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

Aby uzyskać wyświetlanie gałęzi Git w wierszu polecenia, skopiuj plik, w którym ludzie Git umieszczają monit, i umieść go w swoim .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
Brad Sturtevant
źródło
Sugerujesz więc zainstalowanie Msys2 przed lub po instalacji Msys-git? Czy możesz również wyjaśnić, co to oznacza ?:To get have Git branch show in Prompt copy the file that Git folks put their prompt into and source it in your .bashrc (.git-prompt.sh)
Casey Kuball
@ cascer1 [odpowiedź 1 z 2] Mam zainstalowane zarówno [Git for Win] ( git-scm.com/download/win ), jak i [Msys2] ( sourceforge.net/p/msys2/wiki/MSYS2%20installation ). W Msys2 możesz zainstalować Git ręcznie pacman -S git git-flow. Podpowiedź, którą lubię to User@BHost MINGW64 ~/Develop/src/my-git-clone (develop). (develop)Jest to, co się dodaje. Po wprowadzeniu katalogu z .git sub dir (projekt Git) wyświetli on bieżącą gałąź Git (rozwijanie). Ludzie w Git ulepszyli monit w Msys, tworząc plik GitInstallDir\etc\profile.d\git-prompt.sh.
Brad Sturtevant,
@ cascer1 [odpowiedź 2 z 2] Możesz dodać monit Gita (do Msys2), odwołując się do git-prompt.sh w twoim ~ / .bashrc, lub skopiuj / zmień nazwę pliku na ~ / .bash_prompt, a następnie w ~ / .bashrc . "${HOME}/.bash_prompt.sh". Można również skopiować zarówno alias, jak i monit, jak opisano powyżej. Git for Win zawiera Winpty, ale Msys2 tego nie robi pacman -S winpty. Nie testowałem Msys2 bez Git dla Windows, ale Msys2 działa dobrze z GitHub. Traktuję pliki startowe Git for Win (.bashrc itp.) Jako przykłady konfiguracji własnych.
Brad Sturtevant,
@BradSturtevant Uhh, nie jestem pewien, jak odpowiedzieć na to. Wszystko, co zrobiłem, to edytowanie twojego postu, aby był trochę łatwiejszy do przeczytania;). Możesz zobaczyć, co zmieniłem tutaj
cascer1
@ cascar1 To był twój komentarz do edycji o zdaniu nieintelagowym, który próbowałem wyjaśnić. Gdybym tylko miał uprawnienia do edycji :-)
Brad Sturtevant,