如何关闭另外一个python process

hx97105 2011-01-26 05:31:01
我有一个脚本是这样的,起一个进程在后台抓log, log会一直的刷,没有尽头。然后在特定的时间关闭它,或者说,我想什么时候不抓了就停了它。 停的方式呢,就是运行另一个脚本,这个怎么实现呢?抓log的代码如下:


file=open("logs.txt","w")
log=subprocess.Popen(["catch.exe","-t"],shell=False,stdout=subprocess.PIPE)
while log.poll() == None:
line=log.stdout.readline()
file.write(line)
else:
file.close()

谢谢大家了~~~~~
...全文
610 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hx97105 2011-02-22
  • 打赏
  • 举报
回复
谢谢大家,我按照amu9900的作了,一开始正常,后来发现有点问题:line=log.stdout.readline()这一行是阻塞的,也就是说没有新的log打印出来的话,整个循环就卡在这行了,一直等待有新的行可以读到。 这就导致了一个问题, 比如我的log密度没有那么大,有时候隔5分钟才打印一行,如果在这五分钟期间,我想stop,是没法正常close文件的,执行不到else里面去。只有等到5分钟后新的无用的log出现后,文件才能正常被关闭,大家帮忙想想,有啥好办法呢? 谢谢啦~
amu9900 2011-01-27
  • 打赏
  • 举报
回复
如果这样呢?


import os

file=open("logs.txt","w") log=subprocess.Popen(["catch.exe","-t"],shell=False,stdout=subprocess.PIPE)
stop = False
while (log.poll() == None) and (not stop):
line=log.stdout.readline()
file.write(line)
stop = os.path.exists("stop.txt")
else:
file.close()


这样会牺牲一点效率,当然,os.path.exists需要的时间会很少。

需要停止的时候去生成一个stop.txt,手动生成也好,另外脚本去生成也好,让这个循环可以控制。
yxl5958 2011-01-27
  • 打赏
  • 举报
回复
windows的话用 任务计划就能控制什么时间停了。
至于杀进程的话这里有
http://hi.baidu.com/pythonlearner/blog/item/5a718981034b469df603a6a5.html
iambic 2011-01-27
  • 打赏
  • 举报
回复
能不能用在windows上,先看下文档,然后自己试试。
hx97105 2011-01-27
  • 打赏
  • 举报
回复
麻烦大家了, signal 是只能用在linux里面吗?我想做在windows上用的,当然跨平台的更好了
看着奢扣 2011-01-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iambic 的回复:]
kill进程主要缺点是怕处理到一半就挂了,比如log写到半行,那就破坏了程序的完整性。
[/Quote]
有道理...
iambic 2011-01-26
  • 打赏
  • 举报
回复
kill进程主要缺点是怕处理到一半就挂了,比如log写到半行,那就破坏了程序的完整性。
看着奢扣 2011-01-26
  • 打赏
  • 举报
回复
kill进程吧 省事
iambic 2011-01-26
  • 打赏
  • 举报
回复
进程间通信的任何方式都可以。比如signal。更直接点就直接杀进程。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧