【发布时间】:2017-05-14 18:07:53
【问题描述】:
我有一个类将检查用户环境以了解他们是否安装了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
Parrot OS 环境变量:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
注意变量是如何用分号(;)或冒号(:)分割的,有没有办法可以在ruby中使用#split()函数,并用任何不分割的东西分割字母数字字符还是数字?或者有没有更好的方法来确保用户在他们的环境变量中有python 2.7.x?
【问题讨论】:
-
也许你可以简单地使用 split 两次?或者,根据操作系统:MS-DOS 或 Unix,您选择了正确的分隔符?作为替代方案,也许您可以使用 Ruby 的命令行/shell 来查询 python 版本? 'python -V'
-
@Hugo 系统调用的问题(
system('python --version')我确实想到了)是如果他们有多个版本的python,它将默认为3。
标签: ruby environment-variables ruby-2.3 parrot-os