Git-Bash 未按预期运行 Python3,挂起问题

Jus*_*tin 2 linux python python3 git-bash windows-10

我将尽量描述性但尽可能简短......

过去我一直在 Win10 上成功使用 GitBash。我在一段时间不使用它之后又回到了我的 Windows 机器上,似乎无法让它启动以前没有问题运行的 python 脚本。我为 Python3 创建了一个别名,名为 py。例如...

$ py --version
Python 3.7.1
Run Code Online (Sandbox Code Playgroud)

我可以很好地进入迭代器

$ py -i
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit 
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Run Code Online (Sandbox Code Playgroud)

我可以在迭代器中很好地运行我的脚本。但是,使用 ctrl+z 退出会引发错误。结合此错误,当我尝试从命令行运行 scipts 时,它挂起并且没有响应。见下文...

$ py -i
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit 
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>       0 [sig] bash 5224! sigpacket::process: Suppressing signal 18 to 
win32 process (pid 5160)

>>> exit()

$ py Lottery.py
Run Code Online (Sandbox Code Playgroud)

从这一点开始它什么都不做,直到我点击“Enter”,此时它会抛出一个 python 错误并将我返回到我的命令行。我知道 python 脚本正在工作。如果有帮助,我可以发布 python 错误,尽管我认为这是一个红鲱鱼而不是手头的 GitBash 问题的艺术。

关于为什么 GitBash 在尝试运行 python 脚本时运行不佳的任何想法?提前致谢!

mon*_*key 6

这是一个已知问题适用于Windows 10 GitBash的终端与Windows的本地应用程序,如问题pythonpowershellipython,等。

  • 终端吃事件,例如您的屏幕截图。这会中断ctr+c/ctrl+z事件,防止退出
  • 此外,这些应用程序会破坏光标移动,严重损坏外壳。

解决方案是运行winpty,您应该已经从 git-bash 中获得了它。现在 git-bash 能够毫无问题地运行应用程序。

$ winpty python -i
Run Code Online (Sandbox Code Playgroud)

这修复了python -i, ipython -i, powershell。我使用以下别名:

alias ipython='winpty ipython'
alias python='winpty python'
alias node='winpty node'
alias powershell='winpty powershell'
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用不同的终端,例如 Windows Terminal

最近windows发布了一个新的Windows Terminal

现在它支持所有 bash 应用程序、完整的 utf-8 支持(我见过的任何 Windows 终端中最好的,256+ ANSI 颜色等)您不再需要winpty.

编辑您的 JSON 配置以使用:

"commandline" : "ipython.exe"
Run Code Online (Sandbox Code Playgroud)

如果您正在使用python -i,请查看 ipython。

将其与winpty或 终端结合运行ipython。这是对生活质量和可用性的巨大升级。

它增加了很多。

  • 使用foo?和获取函数签名和文档foo??
  • 复制->粘贴有效。
  • 使用任何超过一行的语句大大提高生活质量
  • 语法高亮,甚至匹配大括号
  • 名称的制表符补全属性检查,例如:
x = "hi world"
x.<tab> # all `str` methods pop-up.

# or
import time
time.monotonic?
Run Code Online (Sandbox Code Playgroud)

得到它使用

python -m pip install ipython
Run Code Online (Sandbox Code Playgroud)