2009-09-07 4 views
40

私はいくつかのLinuxツールで作業しています.FHSに依存しているため、このプラットフォームでは役に立たないため、Windowsへのインストールを避ける必要があります。 platform.platform関数は終了しますが、文字列を返します。Pythonで確実にWindowsを検出する

残念ながら、信頼できる結果を得るために、その文字列で何を検索するのかわかりません。誰も検索するかを知っていますか、誰かが私がここで紛失している別の機能を知っていますか?

import platform 

if platform.system() == "Darwin": 
    # Don't have Windows handy, but I'd expect "Win32" or "Windows" for it 

編集:はちょうどあなたがplatform.system()はこの場合のために良い仕事します... platform.platform()を試みたことがわかりました

答えて

58
>>> import platform 
>>> platform.system() 
'Windows' 
9

はこれを試してみてください。私を信じて、それを使ってください。暗いコーナーはプラットフォームの検出にあります。

distutilsあなたがうまくいけば、これもやります。

Windowsファイルでos.path.exists()のような悪いことをいつでも行うことができますが、platformはPython標準ライブラリと同じくらい信頼性があります。

編集2:もう一つの役に立つ回答はplatform.system()が彼のWindowsマシンの「Windows」と正確に一致していると指摘しました。

+1

私はWindowsを手軽に使うことはできませんが、この機能は自分のPCに「Linux」を返します。ドキュメントには「Windows」と書かれているようですので、私はそれだけですべてのケースをカバーすることを願っています。 – blokkie

+0

それはすべきです。パックスの答えを見てください。 –

+0

ああ、あなたの編集はそれをクリアしました。とても感謝しております。 – blokkie

16

私のWindowsのボックスでplatform.system()'Windows'を返します。

しかし、なぜあなたが気になるのかわかりません。技術的に実行されるプラットフォームを制限したい場合は、ブラックリストではなくホワイトリストを使用します。実際に

おそらくのPythonの次のリリースは、(ホワイトリストについて)Win32/Win64の代わりに、Windows(ブラックリスト用)と*nixの代わりLinuxを持っているかもしれないので、私はすべて技術的にそれをしないだろう。

私のアドバイスは、要件が何であるかを簡単に述べることです。ユーザーがそれを無視することを選択した場合、その問題です。 「FHSを見つけることができません」というエラーメッセージが表示され、Windowsで動作していることを認めると、サポートされていない設定であることを静かに指摘します。

あなたの顧客は、Windows上でFHSを実行するのに十分なほどスマートなので、コードがうまく動作するでしょう。彼らはあなたのソフトウェアの恣意的な制限を考慮するとは思えません。

これは毎日ソフトウェア開発者が直面する問題です。巨大な組織でさえ、をすべてサポートしています。単一のプラットフォームと構成があります。ヘルプ(プラットフォーム)

system() 
    Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'. 

    An empty string is returned if the value cannot be determined. 
+1

+1、良い答えと私は同意します。 FHSが利用できないことを検出することは、OSを検出して前提を作るよりもはるかに優れた方法であり、安全です(結局のところ、あなたのプラットフォームの限界を巡る誰かがハックするのはとにかく失敗する*!)。 –

+0

+1、はいコーナーケースが厄介なので、ホワイトリストが望ましいCygwinの下でWindowsのボックスで実行すると、 'CYGWIN_NT-5.2-WOW64'を返す' platform.system() 'が得られます。それは私の最初の推測ではありませんでした! –

2

「インポートされたオペレーティングシステムに依存するモジュールの名前次の名前は、現在登録されています。 'POSIX'、 'NT'、 ' mac '、' os2 '、' ce '、' java '、' riscos 'などがあります。ここでは、「(C)(Windowsだけを検出するために対立するものとして)のPythonからCygwinを検出する方法を探してここに来た人のためにhttp://docs.python.org/library/os.html#os.name

import os 
if os.name == 'nt': 
    #yourcodehere 
5
>>> import os 
>>> os.name 
'nt' 

から

+0

Cygwinで実行しているときに 'os.name'が' posix'を返し、ネイティブウィンドウで実行しているときに 'nt'を返します – sbk

+0

はい、Cygwinは痛みですが、元のストーリーではこの動作は受け入れられます)。 –

46

は、os.nameplatform.systemからのいくつかの例の戻り値は

異なるプラットフォーム上にありますこの時点から
OS/build  | os.name | platform.system() 
-------------+---------+----------------------- 
Win32 native | nt  | Windows 
Win32 cygwin | posix | CYGWIN_NT-5.1* 
Win64 native | nt  | Windows 
Win64 cygwin | posix | CYGWIN_NT-6.1-WOW64* 
Linux  | posix | Linux 

私は、これは将来の証拠である確信していないが、どのようにWindowsの間を区別するために、ネイティブとCygwinは明らかである。

*バージョン番号は、XPとwin7のrespectiのためのものです頼りにしないでください。

+3

Cygwinに「Windows」と表示されます。 –

+0

@JaceBrowning:私たちは恐らくCygwinやPythonの異なるバージョンを使用しています...これは "not-futureproof"という注釈が入っているところです:) – sbk

+0

違いはおそらく私のPythonのインストールはWindowsの一部であり、 Cygwin? –

関連する問題