94

Windows コマンド シェルから実行可能コマンドとして直接実行しようとすると、Python プログラムに渡されるコマンド ライン引数を取得できません。たとえば、このプログラム (test.py) があるとします。

import sys
print "Args: %r" % sys.argv[1:]

そして実行します:

>test foo
Args: []

と比較して:

>python test.py foo
Args: ['foo']

私の構成は次のとおりです。

PATH=...;C:\python25;...
PATHEXT=...;.PY;....

>assoc .py
.py=Python.File

>ftype | grep Python
Python.CompiledFile="C:\Python25\python.exe" "%1" %*
Python.File="C:\Python25\python.exe" "%1" %*
Python.NoConFile="C:\Python25\pythonw.exe" "%1" %*
4

12 に答える 12

119

これで解決したと思います。なんらかの理由で、レジストリに 2 番目の場所があります (HKEY_CLASSES_ROOT\Python.File\shell\open\command に保存されているファイルの関連付けによって示される以外に):

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python25\\python.exe\" \"%1\" %*"

これは私のシステムの制御設定のようです。上記のレジストリ設定では、「%*」を追加してすべての引数を python.exe に渡します (何らかの理由でレジストリにありませんでした)。

于 2010-04-14T21:28:12.983 に答える
14

私の設定は、さらに別のレジストリ キーの下にありHKEY_CLASSES_ROOT\py_auto_fileました。言及された他のキーも存在しましたが、Windows は何らかの理由でこのキーを使用していました。

于 2010-10-14T18:57:52.927 に答える
13

Windows 7 上の Python 3.3 の場合、私の設定は別のレジストリ キーの下にありました。引数が渡されるように変更したキーは

HKEY_USERS\S-1-5-21-3922133726-554333396-2662258059-1000_Classes\py_auto_file\shell\open\command

でした"C:\Python\Python33\python.exe" "%1"。私はそれに追加%*しただけです。キーの値は現在"C:\Python\Python33\python.exe" "%1" %*です。

値を持つ他のキーがいくつか (少なくとも 5 つ) ありまし"C:\Python\Python33\python.exe" "%1"たが、これを変更して機能させました。

于 2013-04-13T22:32:02.743 に答える
0

面白い。Python 2.6 および Windows XP (5.1.2600) を使用してここで動作します。

C:\Documents and Settings\hbrown>python test.py foo
['test.py', 'foo']

C:\Documents and Settings\hbrown>test.py foo
['C:\\Documents and Settings\\hbrown\\test.py', 'foo']

C:\Documents and Settings\hbrown>test foo
['C:\\Documents and Settings\\hbrown\\test.py', 'foo']

C:\Documents and Settings\hbrown>type test.py
import sys
print sys.argv 

C:\Documents and Settings\hbrown>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PY 

C:\Documents and Settings\hbrown>assoc .py
.py=Python.File
于 2010-04-14T21:15:53.447 に答える
0

すべてのレジストリ キーをpython.exeandでチェックし、引数を渡す末尾のpy_auto_fileth を含む現在の Python インストールを指すようにしました。%*それらはかなりの数でした:

  • HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command:

    • 組織: "C:\miniconda3\python.exe" "%1" "%*"
    • 変更: "C:\Python35\python.exe" "%1" "%*"
  • HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

    • 組織: "C:\Program Files\Sublime Text 3\sublime_text.exe" "%1"
    • 変更: "C:\Python35\python.exe" "%1" "%*"
  • HKEY_CURRENT_USER\Software\Classes\py_auto_file\shell\open\command

    • 組織: "C:\Python35\python.exe" "%1" "%*"
  • HKEY_USERS\S-1-5-21-2621213409-1291422344-4183577876-2165\Software\Classes\py_auto_file\shell\open\command

    • 組織: "C:\Python35\python.exe" "%1" "%*"
  • HKEY_USERS\S-1-5-21-2621213409-1291422344-4183577876-2165_Classes\py_auto_file\shell\open\command

    • 組織: "C:\Python35\python.exe" "%1" "%*"
  • HKEY_CLASSES_ROOT\Applications\pythonw.exe\shell\open\command

    • 組織: "C:\Python34\pythonw.exe" "%1"
    • 変更: "C:\Python35\pythonw.exe" "%1" "%*"
  • HKEY_CURRENT_USER\Software\Classes\Applications\python.exe\shell\open\command

    • 組織: "C:\Python35\python.exe" "%1" "%*"

しかし、それは私にとってはうまくいきませんでした。デフォルトの Python アプリケーションも変更する必要がありました。

アプリケーション ダイアログ

ご覧のとおり、3 つの Python バージョンがインストールされています。ここではどれがどれであるかを確認することは不可能なので、デフォルトの Python アプリケーションとして 3 つすべてを試しました。最終的に、これら 3 つのうちの 1 つを使用して、スクリプトの引数を取得することができました。

于 2016-12-16T12:38:08.557 に答える
0

ファイルのプログラムの関連付け.pyが台無しになっている可能性があります。.pyファイルを python 実行可能ファイルに再度関連付けるだけです。

.pyファイルを右クリック> Open with> Choose default program ...> [C:\PythonXY\python.exe を検索]

于 2016-07-15T06:12:53.413 に答える