我正在开发一些脚本(在我工作的公司中),这些脚本加载/卸载到管理程序中,以便在事件发生时触发一段代码。真正卸载脚本的唯一方法是点击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做些什么?
也许我误解了什么,但是你这样做很难得到想要的结果。
不管
buff
是什么,首先查询它,然后在Popen()
的上下文中使用它,然后希望通过macivlineList
填充它自己。你可能想要的是
这将为您提供一个由
vprobe
脚本提供的管道端,您可以逐行读取该脚本,并对找到的输出进行适当的操作。在Linux中,可以使用Popen.send_signal(signal.SIGINT)函数以编程方式将Ctrl-C键盘中断发送到进程。例如
不要使用Popen.communicate()来阻止命令。。
我想你可以发送Linux的等价物,
signal.SIGINT
(中断信号)。(编辑:我以前在这里有些东西不鼓励使用这种策略来控制子流程,但仔细阅读后,听起来你已经决定在这种特定情况下需要control-C。。。所以,SIGINT应该这么做。)
相关问题 更多 >
编程相关推荐