2011-11-01 6 views
6

ユーザーがファイルを右クリックして「Open With」を選択すると、Pythonプログラムがファイルを開く方法を理解しようとしています。たとえば、ユーザーがテキストファイルを右クリックしてプログラムを選択し、プログラムがテキストファイルを処理できるようにしたいとします。テキストファイルの名前は私のプログラムにどこかで渡されますか?ありがとう。"Open with ..." Windows上のファイル(Pythonアプリケーションを使用)

答えて

3

この方法の問題は、.pyファイルが実行可能ファイルではないことです。 Windows は、テキストファイルをパラメータとして.pyファイルに渡しますが、.pyファイル自体は実行ファイルではないため何もしません。

py2exeでスクリプトをコンパイルして実際の実行ファイルを取得することができます。これは実際には "Open With ..."画面で指定できます(* .fooファイルのデフォルトとして登録することもできます)。 )。渡される.fooファイルへのパスは、スクリプト内でsys.argv[1]である必要があります。

+0

py2exeでアクセスできるPythonスクリプトへのファイルパスを渡し、それがすべてでのpythonを必要としないスタンドアロンのexeファイルにプログラムを作るので、やり過ぎであり、それはすべての時間を再コンパイルする必要がありますプログラムは変更されます(開発する場合)。 %python%\ Scripts \には、同じ名前のPythonスクリプトを起動するだけのexeラッパーがあります。誰かがそれについて何かを知っていますか? –

0

まず、PythonでProgIdの下でレジストリに登録するスクリプトを登録する必要があります。最低でも、あなたが定義したオープン動詞必要があります。あなたは、マシン全体でインストールしている場合は、HKEY_LOCAL_MACHINEを置き換えることができ

HKEY_CURRENT_USER\Software\Classes\MyApp.ext\ 
    (Default) = "Friendly Name" 
    DefaultIcon\ 
    (Default) = "path to .ico file" 
    shell\ 
    open\ 
     command\ 
     (Default) = 'path\python.exe "path\to\your\script.py" "%L"' 

を*また、あなたはおそらく無視することができ規則がバージョン管理されています。 File TypesのMSDNセクションには、より詳細な情報があります。

第2のステップはのためにあなたがリストに表示する拡張機能のOpenWithProdIdsキーにあなたのProgIdを追加することです:キーの値が限り、重要ではありません

HKEY_CURRENT_USER\Software\Classes\.ext\OpenWithProgIds 
    MyApp.ext = None 

名前はProgIdと正確に一致します。


* HKEY_CLASSES_ROOTが実際にHKLM\Software\ClassesHKCU\Software\Classes両方の労働組合を「含む」という偽の鍵であることに注意してください。レジストリに書き込む場合は、実際のキーの1つを選択する必要があります。 HKEY_CURRENT_USERにアップグレードする必要はありません。

+0

私は特にこのマシンで自分の設定を混乱させたくないので、私はこれを試していないことを宣言します。 MSDNには、いくつかの他の値を設定する必要があることが示唆されていますが、レジストリを見てみると、必要がないと言われています。この最小限のソリューションがうまくいくかどうかは明らかです。私が逃した余分なビットで編集してください。 – Zooba

+0

これは単純に機能しません。 'open with'メニューの.pyを選択しても、win32アプリケーションではないことが報告されます。 –

0

私のアプローチは、python someprogram.py %1を含むリダイレクト.batファイルを使用することです。 %1
from sys import argv argv[1]

関連する問題