python 解决Windows平台上路径有空格的问题


Posted in Python onNovember 10, 2020

最近在采集windows上中间件的时候,遇到了文件路径有空格的问题。

例如:Aapche的安装路径为D:\Program Files\Apache Software Foundation\Apache2.2。

采集apache要读取配置文件D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf

执行一些D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe -v 这种命令。

读取配置文件是没有问题的,因为用的是python代码,打开文件,读取文件,一行一行遍历,用正则匹配或者字符串比较,就能获取到信息,例如读取配置信息获取端口号。

port_list=[] 
   with open(httpd_conf, "r") as f:
    file_list = f.readlines()
    regex = ur"^Listen\s*(\S*?:)*(\d+)\s*$"
    pattern_listener = re.compile(regex)
    for item in file_list:
     listener_list = pattern_listener.findall(item)
     if listener_list:
      for port_info in listener_list:
       if port_info:
        port = port_info[1]
        if port and port.strip():
         port_list.append(port.strip())

接下来说下,D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe -v 这种通过命令获取信息的。

httpd.exe -v 是获取apache的版本信息。直接在在cmd命令行中输入,显示如下。 

D:\>D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe -v

'D:\Program' 不是内部或外部命令,也不是可运行的程序或批处理文件。

有空格问题,搜了搜发现比较好的一种解决办法,就是在把命令用双引号引起来,下边两种写法都可以。

D:\>"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -v
Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39

D:\>"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" "-v"
Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39

接下来我们在python中用os.popen().read()试试怎么弄。

>>> import os
>>> cmd='"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -v'
>>> os.popen(cmd).read()--这种写法读出来结果为空,是因为\要经过转义,前边加个r就行,cmd与cmd1区别
''
>>> cmd





--\b是正则表达式,所以变成了\x08
'"D:\\Program Files\\Apache Software Foundation\\Apache2.2\x08in\\httpd.exe" -v'
>>> cmd1=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -v'
>>> cmd1
'"D:\\Program Files\\Apache Software Foundation\\Apache2.2\\bin\\httpd.exe" -v'

>>> os.popen(cmd1).read()
'Server version: Apache/2.2.22 (Win32)\nServer built: Jan 28 2012 11:16:39\n'
>>>

接下来再看一个比较复杂点的命令,httpd.exe" -V|find "Server MPM" 这个用来获取apache的运行模式,windows下就是

WinNT,按刚才的套路在cmd命令行里执行没问题。

D:\>"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -V|find "Server MPM" Server MPM: WinNT

那么,我们继续把他移植到python中,继续用os.popen().read()。结果如下图,都不出来结果。

所以说,这种参数比较多的用这种方法是不行的。

>>> cmd1=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -V|find "Server MPM" '
>>> os.popen(cmd1).read()
''

>>> cmd2=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -V|find Server MPM '
>>> os.popen(cmd1).read()
''

>>> cmd3=r'"D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" "-V|find Server MPM" '
>>> os.popen(cmd1).read()
''

在查阅相关资料后,可用subprocess.Popen()来代替os.popen()这个方法,

但是执行后,出来的结果不是想要的,所以说这个方法也实现不了效果(如下)。

>>> import subprocess
>>> cmd=r'D:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe -V|find "Server MPM"'
>>> cmd
'D:\\Program Files\\Apache Software Foundation\\Apache2.2\\bin\\httpd.exe -V|find "Server MPM"'
>>> ps = subprocess.Popen(cmd)
>>> Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39
Server's Module Magic Number: 20051115:30
Server loaded: APR 1.4.5, APR-Util 1.4.1
Compiled using: APR 1.4.5, APR-Util 1.4.1
Architecture: 32-bit
Server MPM:  WinNT
 threaded:  yes (fixed thread count)
 forked:  no

看到这样的结果,放弃折腾了,最终选择了一个曲线救国的方案,用python的os模块,先进入到httpd.exe所在的目录,之后,再执行命令。

>>> homepath="D:\Program Files\Apache Software Foundation\Apache2.2"
>>> BinPath = os.path.join(homepath, 'bin')
>>> os.chdir(BinPath)
>>> apache_model = os.popen('httpd.exe -V |find "Server MPM"').read()
>>> print apache_model
Server MPM:  WinNT

补充知识:python windows下获取路径时有中文处理

在windows中用os,path.abspath(__file__)时有中文路径时,默认是转成非unicode格式

这会导致,在其它模块使用该路径时,会报

utf8' codec can't decode byte 0xb7 in position 14: invalid start byte

怎么处理呢?

网上百度了一把,解决方法都不妥当,还是来个非通用的吧,但很好使用:

如下

project_path = os.path.abspath(__file__.decode('gbk'))

用该方法简单便捷。

好啦,以上这篇python 解决Windows平台上路径有空格的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Matplotlib库入门指南
May 18 Python
Python数据类型详解(二)列表
May 08 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
python中count函数简单的实例讲解
Feb 06 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
Django实现内容缓存实例方法
Jun 30 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 #Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 #Python
pytorch学习教程之自定义数据集
Nov 10 #Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 #Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 #Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 #Python
python request 模块详细介绍
Nov 10 #Python
You might like
php curl模拟post提交数据示例
2013/12/31 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python的中异常处理机制
2018/08/30 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
怎么写自荐书范文
2014/02/12 职场文书
小学三年级学生评语
2014/04/22 职场文书
大型演出策划方案
2014/05/28 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
2015年宣传工作总结
2015/04/08 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
公司行政管理制度范本
2015/08/05 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL