1

ユーザー環境をチェックして、pythonインストールされているかどうかを確認するクラスがあります。クラスの目的は、ユーザーが複数のバージョンの python をインストールしているかどうかを確認し、デフォルトで 3 つにしないようにすることです。

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にそれらの 1 つではありません。#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

変数がセミコロン ( ;) またはコロン ( ):で分割されていることに注意してください。ルビで関数を使用して、#split()英数字または数字以外で分割する方法はありますか? python 2.7.xまたは、ユーザーが環境変数を持っていることを確認するより良い方法はありますか?

4

2 に答える 2

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"]
于 2016-12-30T13:11:30.170 に答える
1

次のように、ユーザーの現在の python バージョンを確認できます: ( source )

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

しかし、ユーザーが python 3 と python 2.7 をインストールし、現在 python 3 を使用している場合。スクリプトはこの状況を処理できません。

于 2016-12-30T12:46:28.957 に答える