欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 解決Windows平臺上路徑有空格的問題

 更新時間:2020年11月10日 16:46:20   作者:神雕愛大俠  
這篇文章主要介紹了python 解決Windows平臺上路徑有空格的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

最近在采集windows上中間件的時候,遇到了文件路徑有空格的問題。

例如:Aapche的安裝路徑為D:\Program Files\Apache Software Foundation\Apache2.2。

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

執(zhí)行一些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命令行中輸入,顯示如下?!?/p>

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

'D:\Program' 不是內(nèi)部或外部命令,也不是可運行的程序或批處理文件。  

有空格問題,搜了搜發(fā)現(xiàn)比較好的一種解決辦法,就是在把命令用雙引號引起來,下邊兩種寫法都可以。

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()  --這種寫法讀出來結(jié)果為空,是因為\要經(jīng)過轉(zhuǎn)義,前邊加個r就行,cmd與cmd1區(qū)別
''
>>> 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命令行里執(zhí)行沒問題。

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

那么,我們繼續(xù)把他移植到python中,繼續(xù)用os.popen().read()。結(jié)果如下圖,都不出來結(jié)果。

所以說,這種參數(shù)比較多的用這種方法是不行的。

>>> 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()
''

在查閱相關(guān)資料后,可用subprocess.Popen()來代替os.popen()這個方法,

但是執(zhí)行后,出來的結(jié)果不是想要的,所以說這個方法也實現(xiàn)不了效果(如下)。

>>> 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

看到這樣的結(jié)果,放棄折騰了,最終選擇了一個曲線救國的方案,用python的os模塊,先進入到httpd.exe所在的目錄,之后,再執(zhí)行命令。

>>> 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__)時有中文路徑時,默認是轉(zhuǎn)成非unicode格式

這會導致,在其它模塊使用該路徑時,會報

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

怎么處理呢?

網(wǎng)上百度了一把,解決方法都不妥當,還是來個非通用的吧,但很好使用:

如下

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

用該方法簡單便捷。

好啦,以上這篇python 解決Windows平臺上路徑有空格的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django框架CBV裝飾器中間件auth模塊CSRF跨站請求問題

    Django框架CBV裝飾器中間件auth模塊CSRF跨站請求問題

    這篇文章主要介紹了Django CBV裝飾器 中間件 auth模塊 CSRF跨站請求,本文給大家介紹給CBV添加裝飾器有三種方法,三種方法都需要導入模塊,具體操作方法跟隨小編一起看看考下
    2021-08-08
  • pytorch損失反向傳播后梯度為none的問題

    pytorch損失反向傳播后梯度為none的問題

    這篇文章主要介紹了pytorch 出現(xiàn)損失反向傳播后梯度為none的問題,具有很好的參考價值,如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 一篇文章帶你搞懂Python類的相關(guān)知識

    一篇文章帶你搞懂Python類的相關(guān)知識

    今天我們要說的是面向?qū)ο蟮暮诵?----類,類能幫我們把復雜的事情變得有條理,有順序,希望大家通過學習類能改善自己的編碼風格,使代碼變得更為好看,更加通俗易懂,需要的朋友可以參考下
    2021-05-05
  • Python的Requests庫示例講解

    Python的Requests庫示例講解

    requests模塊是python基于urllib,采用Apache2 Licensed開源協(xié)議的 HTTP庫,它比 urllib 更加方便,可以節(jié)約我們大量的工作,完全滿足 HTTP測試需求,需要的朋友可以參考下
    2023-05-05
  • win10從零安裝配置pytorch全過程圖文詳解

    win10從零安裝配置pytorch全過程圖文詳解

    這篇文章主要介紹了win10從零安裝配置pytorch全過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 在Python中將元組轉(zhuǎn)換為列表的方法詳解

    在Python中將元組轉(zhuǎn)換為列表的方法詳解

    這兩種Python 數(shù)據(jù)類型看起來很相似,但在上下文中卻有不同的用法,元組和列表之間的主要區(qū)別在于它們的可變性,僅當您需要修改元素時才會將元組轉(zhuǎn)換為列表,本文現(xiàn)在我們將深入研究將元組轉(zhuǎn)換為列表的不同方法,需要的朋友可以參考下
    2023-09-09
  • Python中字符串的常見操作技巧總結(jié)

    Python中字符串的常見操作技巧總結(jié)

    這篇文章主要介紹了Python中字符串的常見操作技巧,結(jié)合實例形式總結(jié)分析了Python針對字符串的反轉(zhuǎn)、編碼轉(zhuǎn)換、進制轉(zhuǎn)換及運算等常用技巧,需要的朋友可以參考下
    2016-07-07
  • 一文詳解Python中itertools模塊的使用方法

    一文詳解Python中itertools模塊的使用方法

    itertools是python內(nèi)置的模塊,使用簡單且功能強大。這篇文章主要為大家詳細介紹了itertools模塊的使用方法,感興趣的小伙伴可以了解一下
    2023-03-03
  • python單測框架之pytest常見用法

    python單測框架之pytest常見用法

    pytest是python的單測框架,使用靈活,插件豐富,本文給大家分享python單測框架之pytest常見用法包括pytest常見的插件,感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • 基于pytorch實現(xiàn)對圖片進行數(shù)據(jù)增強

    基于pytorch實現(xiàn)對圖片進行數(shù)據(jù)增強

    圖像數(shù)據(jù)增強是一種在訓練機器學習和深度學習模型時常用的策略,尤其是在計算機視覺領(lǐng)域,具體而言,它通過創(chuàng)建和原始圖像稍有不同的新圖像來擴大訓練集,本文給大家介紹了如何基于pytorch實現(xiàn)對圖片進行數(shù)據(jù)增強,需要的朋友可以參考下
    2024-01-01

最新評論