2016-12-30 24 views
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はそのうちの一つではありません。私は#split()環境変数が手紙ではない何かによってできる方法がありますか?たとえば:

のWindowsのenv VAR:C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Oracle\Java\javapath オウムOS用のenv VAR:変数はセミコロン(;)またはコロン(:)のいずれかによって分割されているか/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

注意、方法私はそこにありますルビーで#split()関数を使用し、英数字以外の数字で分割することはできますか?または、ユーザが環境変数にpython 2.7.xを持っていることを確認する良い方法がありますか?

+0

はたぶん、あなたは、単に二回の分割を使用することができますか?または、OS:MS-DOSまたはUnixによれば、あなたは正しいセパレータを選択しましたか? 代わりに、Rubyのコマンドライン/シェルを使用して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

リテラル文字列を走査しながら、EOLをそれはすべてのオペレーティングシステム上で動作する必要があるが、これは私が探していたものは基本的です。 – 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 「印刷 ^ にSyntaxErrorファイル: 偽 – User9123

関連する問題