1. ホーム
  2. python

[解決済み] WindowsでPythonスクリプトを実行するには?

2023-01-26 09:07:41

質問

私は簡単なスクリプトblah.pyを持っています(Python 2を使用)。

import sys
print sys.argv[1]

でスクリプトを実行すると

python c:/..../blah.py argument

引数は表示されるけど、スクリプトで実行すると

blah.py argument

エラーが発生します。

IndexError...

そのため、引数はスクリプトに渡されません。

PATHにpython.exeがある。blah.pyのあるフォルダもPATHにある。

python.exeは*.pyファイルを実行するためのデフォルトのプログラムです。

何が問題なのでしょうか?

どのように解決するのですか?

前に "python" と入力せずにスクリプトを実行する場合、Windows がプログラムを呼び出す方法について 2 つのことを知る必要があります。 1 つ目は、Windows がどのような種類のファイルだと考えているかを知ることです。

    C:\>assoc .py
    .py=Python.File

次に、Windows がその拡張子を持つものをどのように実行しているかを知る必要があります。 それはファイル タイプ "Python.File" と関連付けられているので、このコマンドはそれが何を行うかを示しています。

    C:\>ftype Python.File
    Python.File="c:㊙python.exe" "%1" %*。

つまり、私のマシンでは、私が "blah.py foo" と入力すると、この正確なコマンドが実行され、自分で完全なものを入力した場合と結果に違いはないのです。

    "c:\python26﹑python.exe" "blah.py" foo

引用符を含めて同じように入力すると、"blah.py foo"と入力したときと同じ結果が得られるはずです。 これで、問題の残りを自分で解決できる状態になりました。

(または、コンソールで見たものを実際にカットアンドペーストしたコピーのような、より役立つ情報を質問に投稿してください。 そのようなことをする人は、質問が投票され、評判ポイントを獲得し、より多くの人が良い答えで彼らを助ける可能性があることに注意してください)。

コメントから持ち込まれた

assocとftypeが正しい情報を表示しても、引数が取り除かれることがあります。そのような場合に役立つ可能性があるのは、Python の関連するレジストリ キーを直接修正することです。レジストリ キーに

HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command

のキーになります。

"C:\Python26\python26.exe" "%1" %*

尤も、以前は %* が抜けていました。同様に、セット

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

を同じ値に変換します。参照 http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command レジストリのパスは異なる場合があります。 python26.exe または python.exe のどちらか、あるいは既にレジストリに登録されているほうを使用します。

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command