python拓展应用:运行do文件及其衍生内容
1 #-*-coding:utf8-*- 2 import os 3 import subprocess 4 import shutil 5 import psutil 6 import time 7 8 9 #查找指定文件名称和查找范围的文件路径 10 def search(name, path): 11 name = name.lower() 12 for root,dirs,files in os.walk(path): 13 for file in files+dirs: 14 if name in file.lower(): 15 return os.path.join(root,file) 16 return -1 17 18 #修改do文件内容 19 def do(in_file): 20 w = '' 21 for line in open('sort.do','r').readlines(): 22 if 'foreach' in line: 23 ceil = line.split(" ") 24 ceil[len(ceil)-1] = '"'+in_file+'"{\n' 25 w = "" 26 for i in ceil: 27 w = w + i + ' ' 28 else: 29 w += line 30 31 with open('sort.do','wb') as writer: 32 writer.write(w) 33 34 #运行指定的其他类型的程序,如do文件 35 def run_do(do_file,in_file): 36 37 do(in_file) 38 39 # 查找windows所有盘符名称 40 information = os.popen("wmic LOGICALDISK get name").read().split("\r\n") 41 code = [] 42 for inform in information: 43 if ':' in inform: 44 code.append(inform.strip()) 45 print code 46 47 # 遍历所有盘符,直到找到StataMP-64.exe文件 48 for path in code: 49 stata_path = search('StataMP-64.exe', path + '\\') 50 if stata_path != -1: 51 break 52 print stata_path 53 54 if os.path.exists('20140803'): 55 pass 56 print '已存在' 57 else: 58 do_file = os.path.abspath(do_file + '.do') 59 cmd = [stata_path,'do',do_file] 60 child = subprocess.Popen(cmd) 61 #找出本机逻辑核个数 62 cpu_count = psutil.cpu_count() 63 while True: 64 time.sleep(5) 65 # 传入进程PID,实现监控功能 66 cpu_percent = psutil.Process(child.pid).cpu_percent(interval=2) 67 percent = cpu_percent/cpu_count 68 print cpu_count,cpu_percent,percent 69 if percent == 0: 70 child.kill() 71 print 'Success' 72 break 73 74 if __name__ == '__main__': 75 76 run_do('sort')