python编写windows平台下脚本二三事
2016-01-07 19:38
411 查看
一穷二白的开始写python脚本。
需要实现的功能很简单:利用dumpbin.exe来分析检查下windows的动态库和符号导出表等是否匹配,用来解决问题。
碰到实际问题:
1.如何添加设置环境变量
起因是:dumpbin需要先设置好环境变量,否则dumpbin.exe里需要调用的动态库会出现找不到而导致运行失败。
解决办法:
经过百度bing,可以通过如下方式:
env = os.environ['PATH']
os.environ['PATH'] = "需要多添加的路径"+ env
这样就将新的环境变量值添加到了原有的PATH变量中。
2.windows中的文件名若有空格,如何处理?
起因是:执行的文件dumpbin在C:/Program Files/.../dumpbin.exe下这里存在了空格,但是显然在控制台窗口中直接这么执行也是不行的,会自动截断然后报错
解决办法:
1)通过百度和尝试,发现在控制台窗口中如果在绝对路径的文件名前后用双引号包裹可以保证不出现截断命令。
然而在python中不能这样写“C:/Program Files/.../dumpbin.exe“,因为这样写默认就是字符串,而写成““C:/Program Files/.../dumpbin.exe“”也会报错,会认为语法错误前后两个空串夹了一个未知的字符序列。
2)改成“/“C:/Program Files/.../dumpbin.exe/“”,用转移字符/保证将"作为字符串的实际内容
3.windows中的命令输出如何导到变量中?
起因:bat批处理脚本中也存在这个问题,dumpbin.exe执行完是有结果的,但是其结果只能通过流的方式先导入到文件,然后再用for /f循环导回到变量中。在python下由于执行的命令是os.system()函数,但是其返回值只是命令是否成功,结果是直接输出到标准输出上的。
解决办法:通过调用
变量名 = os.popen(命令).readlines()
来将命令的结果读入到变量名
4.模式匹配搜索时发现没法确定搜索的其实位置
起因:想要在某个区间内进行搜索和模式匹配,比如dumpbin的结果在summary和file type之间,来搜索依赖的库。
解决办法:利用字符串对象的find接口。
返回的子串的位置 = 需要搜索的全部的字符串.find(搜索的子串,起始位置,终止位置)
5.无法在python中读取非txt格式的文本方式的文件
起因:想查找符号表lib文件中dll的名称是否存在,但是发现python下如果用open打开都是二进制的方式,但是用ultraedit打开发现其实是可以看到对应的文本的。造成的结果就是无法从文件中读到变量后进行查询确认。
解决办法:
仍然是用 os.popen(命令).readlines(),命令则是直接grep 查找的字符串 对应的查找文件,得到的结果若是空串,则说明文件里没有该字符串,若不是空串则说明有。
6.删除字符串中右边的\n
起因:dumpbin输出的有多行,每行都有一个\n作为结尾,处理时需要删掉
解决办法:利用字符串对象的strip函数。
目标字符串.rstrip('\n')就可以把目标字符串的右边的\n删除掉
7.块注释
用'''开头和结尾
需要实现的功能很简单:利用dumpbin.exe来分析检查下windows的动态库和符号导出表等是否匹配,用来解决问题。
碰到实际问题:
1.如何添加设置环境变量
起因是:dumpbin需要先设置好环境变量,否则dumpbin.exe里需要调用的动态库会出现找不到而导致运行失败。
解决办法:
经过百度bing,可以通过如下方式:
env = os.environ['PATH']
os.environ['PATH'] = "需要多添加的路径"+ env
这样就将新的环境变量值添加到了原有的PATH变量中。
2.windows中的文件名若有空格,如何处理?
起因是:执行的文件dumpbin在C:/Program Files/.../dumpbin.exe下这里存在了空格,但是显然在控制台窗口中直接这么执行也是不行的,会自动截断然后报错
解决办法:
1)通过百度和尝试,发现在控制台窗口中如果在绝对路径的文件名前后用双引号包裹可以保证不出现截断命令。
然而在python中不能这样写“C:/Program Files/.../dumpbin.exe“,因为这样写默认就是字符串,而写成““C:/Program Files/.../dumpbin.exe“”也会报错,会认为语法错误前后两个空串夹了一个未知的字符序列。
2)改成“/“C:/Program Files/.../dumpbin.exe/“”,用转移字符/保证将"作为字符串的实际内容
3.windows中的命令输出如何导到变量中?
起因:bat批处理脚本中也存在这个问题,dumpbin.exe执行完是有结果的,但是其结果只能通过流的方式先导入到文件,然后再用for /f循环导回到变量中。在python下由于执行的命令是os.system()函数,但是其返回值只是命令是否成功,结果是直接输出到标准输出上的。
解决办法:通过调用
变量名 = os.popen(命令).readlines()
来将命令的结果读入到变量名
4.模式匹配搜索时发现没法确定搜索的其实位置
起因:想要在某个区间内进行搜索和模式匹配,比如dumpbin的结果在summary和file type之间,来搜索依赖的库。
解决办法:利用字符串对象的find接口。
返回的子串的位置 = 需要搜索的全部的字符串.find(搜索的子串,起始位置,终止位置)
5.无法在python中读取非txt格式的文本方式的文件
起因:想查找符号表lib文件中dll的名称是否存在,但是发现python下如果用open打开都是二进制的方式,但是用ultraedit打开发现其实是可以看到对应的文本的。造成的结果就是无法从文件中读到变量后进行查询确认。
解决办法:
仍然是用 os.popen(命令).readlines(),命令则是直接grep 查找的字符串 对应的查找文件,得到的结果若是空串,则说明文件里没有该字符串,若不是空串则说明有。
6.删除字符串中右边的\n
起因:dumpbin输出的有多行,每行都有一个\n作为结尾,处理时需要删掉
解决办法:利用字符串对象的strip函数。
目标字符串.rstrip('\n')就可以把目标字符串的右边的\n删除掉
7.块注释
用'''开头和结尾
相关文章推荐
- pip: 修改源地址
- Ipython简介(二)
- PythonTutorial-01 一些基础知识
- python webdriver unittest 参考文章
- python入门(三)
- python面向对象
- Python学习笔记10-Python MysqlHelper ,MySql 辅助类
- Python学习笔记10-Python MysqlHelper ,MySql 辅助类
- pythonIO和异常处理
- python模块
- python函数
- pdfminer python安装
- python mysql操作使用变量作为表名
- 【详解】Python每小时脚本中---<取数据库函数>和<发邮件问题>
- Python Ctypes
- 参考<<精通正则表达式>>一书对我们ETL log解析模块一个正则的优化
- python日期和时间
- python用paramiko将执行的结果存入excel表格
- 不显示 Flask Server 的输出信息
- python变量类型