![无法在新的 msys-git 终端上以交互模式使用 python?](https://linux22.com/image/1464230/%E6%97%A0%E6%B3%95%E5%9C%A8%E6%96%B0%E7%9A%84%20msys-git%20%E7%BB%88%E7%AB%AF%E4%B8%8A%E4%BB%A5%E4%BA%A4%E4%BA%92%E6%A8%A1%E5%BC%8F%E4%BD%BF%E7%94%A8%20python%EF%BC%9F.png)
我最近升级了我的笔记本电脑,它运行的是 32 位 Win7,而我的新笔记本电脑运行的是 64 位 Win7 安装。
我正在从 git-scm.com 安装 git 2.5.1 以及最新的 python 版本(3.4.3 和 2.7.10)。
在安装过程中,我选择使用安装时未附带的新(默认)终端,并在安装完成后启动终端。python
但是,当我输入时,我没有看到任何输出(按下回车键时光标移动到下一行)。
我尝试输入 python 命令,例如print('hello world')
,如果我输入 之类的内容,我唯一能得到的输出是语法错误a.4
。 python 似乎正在运行,但我没有得到任何输出。 无论我运行哪个版本的 python,都会发生这种情况。
Python 似乎可以与基于 Windows cmd 的替代 git 一起正常运行,但我的常规控制台包装器 Console2 似乎无法正常工作,因此我无法轻松地使用它进行复制/粘贴。
知道为什么 msys 控制台不工作,或者我该如何修复它吗?
答案1
从安装向导:
如果您想使用 MSys2/Git 附带的 MinTTY 终端,您必须使用 winpty 启动 Python 等控制台程序。
从 Windows 2.7.1 版 Git 开始,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 交互模式下使用箭头键检索命令历史记录存在一些问题。
答案2
Git 使用 Msys,现在有一个更好的,系统管理软件!
使用它以及 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 分支显示在 Prompt 中,请复制 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