【问题标题】:python error Suppressing signal 18 to win32python错误抑制信号18到win32
【发布时间】:2018-10-11 03:25:20
【问题描述】:

我用以下内容创建了一个简单的 test.py:

import sys
res = sys.stdin.read()
print(res)

但是当我尝试运行时

python test.py

然后我输入

hello

Ctrl+z结束输入,我得到如下信息:

4 [sig] bash 11516! sigpacket::process: Suppressing signal 18 to win32 process (pid 10620)

我不知道出了什么问题。

【问题讨论】:

    标签: python winapi signals stdin


    【解决方案1】:

    信号 18 只是 Ctrl+Z 的处理程序。 (技术上它映射到SIGTSTP。)信号告诉进程暂停。由于信号通常对 Windows 进程没有意义,因此 git-bash 会抑制消息,但它仍然让您知道它抑制了该信号。

    不幸的是,默认的 git-bash 终端 MinTTY 无法正确连接本机 Windows 控制台应用程序的控制台。因此,即使忽略警告消息,python 解释器也不能真正正常工作。 (More info)

    为了正确连接python,您需要使用winpty 来启动python。命令:

    winpty python test.py
    

    会起作用。如果您需要访问 git 命令,也可以使用 git-cmd,如果不需要,也可以打开标准的 Windows 命令提示符并在那里运行 python。

    【讨论】:

    • 感谢@eryksun 的更正,我更新了答案。我对复杂的 POSIX 信号不是很熟悉,所以如果我对错误消息的解释不是很好,请告诉我,我可以再试一次。
    • 我的评论部分是要注意这个 POSIX 信号和 pty 仿真对于使用 MSYS2 的程序是有效的。例如,如果您从这个 mintty bash 会话中运行 cat,您可以(假装)使用 Ctrl+Z 暂停它,返回到 bash 并使用 fg 恢复它,然后使用 Ctrl+D 结束从标准输入的读取。它只是不适用,并且在运行 WinAPI 控制台应用程序时通常会损坏。但是你的回答很好,我已经投了赞成票。
    • 如果您的终端卡在[sig] bash 11516! sigpacket::process: Suppressing signal 18 to win32 process,只需在终端中输入“hello”之类的内容,然后按回车键。任何 Ctrl- 命令都不起作用。这就是我提出这个问题的真正目的。
    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多