Python宝典第十章:系统编程

来源:互联网 发布:java垃圾自动回收 编辑:程序博客网 时间:2024/06/12 19:39

Python虽然是脚本语言,但是借助扩展后同样可以进行体系级别的程序编写。

通过使用win32api模块,可以方便的访问注册表对其进行打开关闭等等。。。(需要自己下载pywin32)

<span style="font-size:14px;">from win32api import *from win32con import *name="SOFTWARE\\Python\\PythonCore\\3.4\\Installpath"key=RegOpenKey(HKEY_LOCAL_MACHINE, name, 0, KEY_ALL_ACCESS) #key为打开的句柄RegQueryValue(key,'') #'F:\\rantom\\python3.4\\'RegCloseKey(key)</span>

操作注册表类:

  • 打开注册表:RegOpenKey[Ex](key, subkey, reserved, sam) Key为5个基本型,subkey子项,reserved必须为0, sam进行的操作
  • 关闭注册表:RegCloseKey(key)
  • 读取项值:RegQueryValue(key, subkey)          RegQueryValueEx(key, valuename)
  • 查询项的基本信息:RegQueryInfoKey(key) 返回子项数目,项值数目,最后一次修改时间
  • 设置项值:RegSetValueEx(key, valueName, reserved, type, value)         RegSetValue(key, subkey, type, value)
  • 添加删除项:RegCreateKey(key, subkey)        RegDeleteKey(key, subkey)
# -*- coding:utf-8 -*-# file: pyAdd2AutoRun.py#from win32api import *from win32con import *name="SetIE"path="F:\\rantom\\python3.4\\SetIE.py"KeyName="Sofware\\MicroSoft\\Windows\\CurrentVersion\\Run"try:    key=RegOpenKey(HKEY_CURRENT_USER,\                   KeyName,\                   0,\                   KEY_ALL_ACCESS)    RegSetValueEx(key, name, 0, REG_SZ, path)    RegCloseKey(key)except:    print("error")print("added that!")

# -*- coding:utf-8 -*-# file: pySetIE.py#from win32api import *from win32con import *from datetime import *from string import *keyname="Sofware\\MicroSoft\\Internet Explorer\\Main"page="www.baidu.com"today=date.today()title=today.strftime("%Y")+"年"+today.strftime("%m")+"月"+today.strftime("%d")+"日"try:    key=RegOpenKey(HKEY_CURRENT_USER,\                   keyname,\                   0,\                   KEY_ALL_ACCESS)    StartPage=RegQueryValueEx(key, "Start Page")except:    print("error")else:    if StartPage[0]!=page:        RegSetValueEx(key, "Start Page", 0, REG_SZ, page)    RegSetValueEx(key, "Window Title", 0, REG_SZ, title)    RegCloseKey(key)

文件和目录:OS模块
  • 当前路径:getcwd()
  • 获得目录中内容:listdir(path)
  • 创建目录:mkdir(path)
  • 删除目录:rmdir(path) 目录必须存在且为空
  • 判断是否是目录:path.isdir(path)      path.isfile(path)
# -*- coding:utf-8 -*-# file: pyBatchRename.py#from os import *perfix="Python"length=2base1format="mdb"def PadLeft(str, num, padstr):    stringlength=len(str)    n=num-stringlength    if n>=0:        str=padstr*n+str    return strprint("the files in %s will be renamed" % os.getcwd())input=input("press y to continue\n")if input.lower()!="y":    exit()filenames=os.listdir(os.curdir)i=base-1for filename in filenames:    i=i+1    if filename!="pyBatchRename.py" and path.isfile(filename):        name=str(i)        name=PadLeft(name, length, '0')        t=filename.split('.')        m=len(t)        if format=='':            rename(filename, perfix+name+'.'+t[m-1])        else:            if t[m-1]==format:                rename(filename, perfix+name+'.'+t[m-1])            else:                i=i-1    else:        i=i-1

代码框架生成器:
# -*- coding:utf-8 -*-# file: pyMakeCode.py#from os import *from sys import *from datetime import *py="""#--------------------------------------------# To:#--------------------------------------------# By:#--------------------------------------------"""if path.isfile(argv[1]):    print("%s already exist!" % argv[1])    exit()file=open(argv[1],'w')today=date.today()date=today.strftime('%Y')+'-'+today.strftime('%m')+'-'+today.strftime('%d')filetypes=str.split(argv[1],'.')length=len(filetypes)filetype=filetypes[length-1]if tiletypes=="py":    print("use python mode")    file.writelines("# -*- coding:utf-8 -*-")    file.write('\n')    file.writelines("# file: "+argv[1])    file.write('\n')    file.write(py)    file.write("# Date: "+date)    file.write('\n')    file.write("#--------------------------------------------")else:    print("just create %s" % argv[1])file.close

生产可执行文件(略。。。)
py2exe或者cx_freeze

运行其他程序:
os.system(command): command相当于在cmd里面打的命令
os.system('nodepad')
os.system('nodepad python.txt')

使用shellexecute函数运行程序(win32api模块),相当于在资源管理器中双肩文件图标,系统会打开项羽的应用程序执行操作
ShellExecute(hwnd, op, file, params, dir, bShow)

为了控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数创建一个运行响应程序的进程。

ctypes调用kernel32.dll的函数(略。。。)

0 0