1. 程式人生 > >windows和linux路徑斜槓不相容問題

windows和linux路徑斜槓不相容問題

這兩天寫python指令碼時發現一個問題,就是windows系統和linux系統的路徑問題,windows系統是諸如C:\Users\vlyu\Perforce\這樣的右斜槓,而linux下是諸如/home/vlyu/這樣的左斜槓,一開始自己只在單系統下開發和測試,沒考慮到這個問題,所以當在指令碼中需要自行組合path成一個新的path或者需要匹配subPath時,直接用比較笨的方法,類似硬編碼那樣的錯誤,直接把\\dirname或者/dirname這樣的路徑加到新path上面去(類似newPath = path +dirName的寫法),這樣容易導致指令碼只在windows/linux上正常跑,而在另一個系統則因為無法識別這樣格式的path導致出錯。

後來尋求解決辦法,一開始希望用正則表示式來模糊化斜槓解決問題,但是發現這種方法容易出現漏洞,萬一path其他地方就包含這個表示式呢,所以還是得結合整個path也就是要把斜槓考慮進去。後來想起來python裡面有個join函式:

import os
os.path.join(os.getcwd(),dirname1,dirname2,...)

這個函式就可以脫離斜槓把路徑結合起來組成新路徑了。而不是自己在程式碼裡寫死是用/還是\\。示例如下:

windows下:

>>> import os
>>> os.getcwd()
'C:\\Program Files (x86)\\python27'
>>> os.path.join(os.getcwd(),"hello")
'C:\\Program Files (x86)\\python27\\hello'
>>> os.path.join(os.getcwd(),"hello","hi")
'C:\\Program Files (x86)\\python27\\hello\\hi'

linux下:
>>> import os
>>> os.path.join(os.getcwd(),"infra",'CMake.txt')
'/home/dev/vlyu/infra/CMake.txt'

因此,自己得到了一個心得就是,對於這種系統不相容或者說所謂跨平臺的問題,應該交由程式語言去解決,語言的開發者肯定有解決辦法給你提供,而不應試圖自己去造輪子,寫一大堆程式碼去匹配兩種系統的模式相容。畢竟python或者Java這些語言已經給你遮蔽了系統相容性,你總能找到自己用得上的模組去解決不同系統的相容性問題。所以,今後遇到這類問題,應該首先考慮我可以用語言(例如python)的什麼模組或者函式去解決這個問題,而不是趕緊就著手自己造輪子去寫繁雜的程式碼,畢竟自己寫出來的未必盡善盡美地相容了。