相关疑难解决方法(0)

在Windows上将^ C发送到Python子进程对象

我有一个测试工具(用Python编写),需要通过发送来关闭被测程序(用C语言编写)^C.在Unix上,

proc.send_signal(signal.SIGINT)
Run Code Online (Sandbox Code Playgroud)

工作得很好.在Windows上,会抛出错误("不支持信号2"或类似的东西).我正在使用Python 2.7 for Windows,所以我觉得我应该能够做到

proc.send_signal(signal.CTRL_C_EVENT)
Run Code Online (Sandbox Code Playgroud)

但这根本不起作用.我需要做什么?这是创建子进程的代码:

# Windows needs an extra argument passed to subprocess.Popen,
# but the constant isn't defined on Unix.
try: kwargs['creationflags'] = subprocess.CREATE_NEW_PROCESS_GROUP
except AttributeError: pass
proc = subprocess.Popen(argv,
                        stdin=open(os.path.devnull, "r"),
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        **kwargs)
Run Code Online (Sandbox Code Playgroud)

python windows subprocess

22
推荐指数
3
解决办法
2万
查看次数

使用Git Bash/MINGW64和Go在Windows上捕获CTRL-C

我想在用户点击CTRL-C之前运行特定代码.代码在Go中,我想使用Git Bash/MINGW64在Windows上运行它.使用Go,我做

interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
// some goroutines get started here
// ...
for {
  select {
  case <-interrupt:
    // code which shall be run on CTRL-C
  }
}
Run Code Online (Sandbox Code Playgroud)

在Windows上,当我使用Windows命令行时,这可以工作,但我希望它也适用于MINGW64/Git Bash.

我发现在/sf/answers/2238248981/上添加了

trap '' SIGINT
Run Code Online (Sandbox Code Playgroud)

到〜/ .bashrc捕获SIGINT信号并阻止bash终止我的程序.

这适用于MINGW32和bash版本

$ bash --version
GNU bash, version 3.1.20(4)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

但它无法在MINGW64,bash版本上运行

$ bash --version
GNU bash, version 4.3.42(5)-release (x86_64-pc-msys)
Copyright (C) 2013 Free Software Foundation, Inc.
[...]
Run Code Online (Sandbox Code Playgroud)

MINGW64或新的(git)bash版本有什么不同?

为了便于测试,以下是查看行为差异的最小示例: …

bash mingw go git-bash

11
推荐指数
1
解决办法
2485
查看次数

Control-C在Windows 7上的git bash中杀死了Ipython

经过这么多年的Linux巡航,我又回到了一个疯狂的Windows环境中.我使用Ipython,然后在git bash中启动它.我很难使用其他东西,因为环境配置为在我的办公室使用它.

所以,当我启动Ipython时,我错误地启动了一个无限循环,或者一些需要很长时间才能执行的错误代码,我使用了ctrl-c.

这会杀死Ipython,这很烦人.我没有找到任何办法来绕过这个或另一个可以做到这一点的关键.

任何想法都将受到高度赞赏.

谢谢一堆

git ipython sigint

3
推荐指数
1
解决办法
616
查看次数

标签 统计

bash ×1

git ×1

git-bash ×1

go ×1

ipython ×1

mingw ×1

python ×1

sigint ×1

subprocess ×1

windows ×1