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 callable()函数用法实例分析
Mar 17 Python
python实现最长公共子序列
May 22 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
python3将视频流保存为本地视频文件
Jun 20 Python
Python多项式回归的实现方法
Mar 11 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
python每天定时运行某程序代码
Aug 16 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
Python模块future用法原理详解
Jan 20 Python
python图片灰度化处理的几种方法
Jun 23 Python
Python数据结构之队列详解
Mar 21 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
海量经典的jQuery插件集合
2010/01/12 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
js制作提示框插件
2020/12/24 Javascript
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
python 日期排序的实例代码
2019/07/11 Python
python_mask_array的用法
2020/02/18 Python
python读取mysql数据绘制条形图
2020/03/25 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Opencv求取连通区域重心实例
2020/06/04 Python
浅析python 字典嵌套
2020/09/29 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
strstr()的简单实现
2013/09/26 面试题
喷漆工的岗位职责
2014/03/17 职场文书
授权委托书范本
2014/04/03 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
社区平安建设方案
2014/05/25 职场文书
公司外出活动方案
2014/08/14 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年评职称工作总结
2014/11/20 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL