2016-12-30 41 views
1

我有一個類將檢查用戶環境以確定它們是否安裝了python,這些類的目的是檢查用戶是否安裝了多個版本的Python,並且不默認爲三:通過任何不是字母的方式拆分數組

class CheckForPythonicVariables 

    class << self 

    def find_python_env_var 
     py_path = [] # Results of the python env variables 
     env_vars = ENV.to_h 
     items = env_vars["Path"].split(";") # Split the environment variables into an array 
     items.each { |var| 
     if var.to_s.include?("Python") # Do you have python? 
      py_path.push(var) 
     end 
     } 
     py_path.each { |python| 
     if python.include?("Python27") # Python 2.7.x? 
      return true 
     elsif python.include?("Python3") # Python 3.x.x? 
      return false 
     else 
      raise "You do not have python installed" 
     end 
     } 
    end 

    end 

end 

現在這個工作,但它僅適用於Windows和選擇幾個Linux OS,顯然Parrot是不是其中之一。有沒有辦法,我可以通過任何不是字母的環境變量#split()?例如:

的Windows的環境變量:C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath 鸚鵡OS的環境變量:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

注意怎樣的變量的任何一個分號(;)或冒號(:)分裂,是有辦法,我可以在ruby中使用#split()函數,並且可以使用不是字母數字或數字的任何東西進行分割?或者有更好的方法來確保用戶的環境變量中有python 2.7.x

+0

也許你可以簡單地使用分兩次?或者,根據操作系統:MS-DOS或Unix,你選擇了正確的分隔符? 作爲替代方案,也許你可以使用Ruby的命令行/ shell來查詢python版本? 'python -V' – Hugo

+0

@Hugo系統調用問題('system('python --version')'我的確這麼認爲)是,如果他們有多個版本的python,它將默認爲3 – User9123

回答

1

此正則表達式匹配所有非字母數字字符:/[^a-zA-Z0-9]/

如果要匹配所有非字母數字字符(不包括)的正斜槓和反斜槓,請使用/[^a-zA-Z0-9\/\\]/

例子:

str = 'C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath' 
str.split /[^a-zA-Z0-9\/\\]/ 
# => ["C", "\\Python27\\", "C", "\\Python27\\Scripts", "C", "\\ProgramData\\Oracle\\Java\\javapath"] 

str = '/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games' 
str.split /[^a-zA-Z0-9\/\\]/ 
# => ["/usr/local/bin", "/usr/bin", "/bin", "/usr/local/games", "/usr/games"] 
+0

它需要在所有操作系統上工作,但是這基本上就是我一直在尋找。 – User9123

+1

添加了Parrot OS示例 – cobaltsoda

+0

您是男人!謝謝,我不會接受它,因爲我想看看其他人的想法。但是這對我來說似乎是一個好開始 – User9123

1

您可以檢查用戶當前的Python版本類似如下:(source

%x(python -c 'print __import__("sys").version_info < (2,8)') == "True\n" 

但是,如果用戶安裝python 3和python 2.7,而他們使用Python 3現在。該腳本無法處理這種情況。

+0

這就是找到這些變量,如果他們有3個,那麼它將不會運行,但如果他們有2和3,它將創建一個名爲'python27'的臨時變量並從那裏運行它。 – User9123

+0

這也不起作用:文件「」,1號線 「打印 ^ 語法錯誤:EOL同時掃描字符串字面 假 – User9123