【python】读取文件&停止启动进程

来源:互联网 发布:大数据涂子沛概括 编辑:程序博客网 时间:2024/06/03 17:12

remote6区域版上报数据的机制是重启客户端PC会上报一次数据,而干掉然后重启进程并不算是一次重启,其实是在重启时,读取config.ini文件的lastShutDownTime,修改lastShutDownTime的值后,重启进程会记录为重启一次且上报数据

最近在看python,计划使用python写一个脚本实现该目的

建立一个restartRemote.py的工程,首先是读写配置文件的操作
由于只需要修改该文件的第21和22行,故读取整个.ini文件后,修改制定行的值,然后写入文件即可

    r=open('C:/Program Files (x86)/Seewo/SeewoService/config.ini','r+')    flist=r.readlines()    flist[20]='lastShutDownTime =Thfffffu Nov 0df3 09:06:21 2erd016\n'    flist[21]='1cacheDevUsers = 100\n'    w=open('C:/Program Files (x86)/Seewo/SeewoService/config.ini','w+')    w.writelines(flist)

验证发现读写是成功的

好,继续下一步,关闭进程后启动进程

    skill = os.system('taskkill /F /IM SeewoService.exe')    time.sleep(1)    start = Popen([r'C:\Program Files (x86)\Seewo\SeewoService\SeewoService.exe'])

OK,可正常关闭和启动进程

执行代码,结束后可成功实现业务逻辑

因为是压测产生数据,故需要循环执行,

import osimport timefrom subprocess import Popenfor num in range(1,3):        r=open('C:/Program Files (x86)/Seewo/SeewoService/config.ini','r+')    flist=r.readlines()    flist[20]='lastShutDownTime =Thfffffu Nov 0df3 09:06:21 2erd016\n'    flist[21]='1cacheDevUsers = 100\n'    w=open('C:/Program Files (x86)/Seewo/SeewoService/config.ini','w+')    w.writelines(flist)    skill = os.system('taskkill /F /IM SeewoService.exe')    time.sleep(1)    start = Popen([r'C:\Program Files (x86)\Seewo\SeewoService\SeewoService.exe'])    print 'it is the '+str(num) + ' times'

循环的第二次时,报错

Traceback (most recent call last):  File "C:/Users/llz/PycharmProjects/HelloWord/restartRemote.py", line 16, in <module>    flist[20]='lastShutDownTime =Thfffffu Nov 0df3 09:06:21 2erd016\n'IndexError: list assignment index out of range

开始怀疑是因为业务间并没有等待会引起时间差导致错误,修改后发现并不是。逐个排查仍未找出原因,仔细一看,文件读写后并没有close,这样会引起下次读写出错。在读写后加上.close()函数即可

    r=open('C:/Program Files (x86)/Seewo/SeewoService/config.ini','r+')    flist=r.readlines()    r.close()    flist[20]='lastShutDownTime =Thfffffu Nov 0df3 09:06:21 2erd016\n'    flist[21]='1cacheDevUsers = 100\n'    w=open('C:/Program Files (x86)/Seewo/SeewoService/config.ini','w+')    w.writelines(flist)    w.close()

OK,循环执行,但是发现数据并没有上报,而是执行结束后,等待一小会才会上报数据。什么问题导致的呢,原来每次重启后,客户端需要连接请求服务器成功后才会上报数据。因为等待时间过短,在进程起来后,并没有成功初始化网络连接服务端就开始关闭启动进程,这样导致数据一直写在本地没有上报

修改在进程起来后,等待5秒钟,再次修改配置文件,即可成功实现业务
完整代码如下:

__author__ = 'llz'import osimport timefrom subprocess import Popenconf = 'C:/Program Files (x86)/Seewo/SeewoService/config.ini'serviceEXE = r'C:\Program Files (x86)\Seewo\SeewoService\SeewoService.exe'for num in range(1,3):    r=open(conf,'r+')    flist=r.readlines()    r.close()    print "read the file"    flist[20]='lastShutDownTime =Thfffffu Nov 0df3 09:06:21 2erd016\n'    print flist[20]    flist[21]='1cacheDevUsers = 100\n'    w=open(conf,'w+')    w.writelines(flist)    w.close()    print "write the file"    time.sleep(1)    skill = os.system('taskkill /F /IM SeewoService.exe')    print "kill SeewoService.exe"    time.sleep(1)    sstart = Popen([serviceEXE])    print "start SeewoService.exe"    print "waitwait 1 seconds"    time.sleep(5)    print 'it is the '+str(num) + ' times'
0 0
原创粉丝点击