回答问题

我正在研究一些脚本(在我工作的公司中),这些脚本被加载/卸载到管理程序中,以便在事件发生时触发一段代码。实际卸载脚本的唯一方法是按 Ctrl-C。我正在用 Python 编写一个函数来自动化这个过程

一旦它在程序的输出中看到字符串"done",它就应该终止vprobe。我正在使用subprocess.Popen执行命令:

lineList = buff.readlines()
cmd = "vprobe /vprobe/myhello.emt"
p = subprocess.Popen(args = cmd, shell=True,stdout = buff, universal_newlines = True,preexec_fn=os.setsid)
while not re.search("done",lineList[-1]):
        print "waiting"
os.kill(p.pid,signal.CTRL_C_EVENT)

如您所见,我正在以读写模式打开的buff文件描述符中写入输出。我检查最后一行;如果它有'done',我杀了它。不幸的是,CTRL_C_EVENT仅对 Windows 有效。我能为 Linux 做些什么?

Answers

我认为您可以发送 Linux 等效项signal.SIGINT(中断信号)。

(编辑:我曾经在这里有一些东西不鼓励使用这种策略来控制子进程,但仔细阅读后,听起来你已经决定在这种特定情况下需要 control-C ......所以,SIGINT 应该这样做.)

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐