WindowsでPythonスクリプトを実行する方法は?


91

シンプルなスクリプトblah.py(Python 2を使用)があります。

import sys
print sys.argv[1]

スクリプトを次のように実行すると:

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

引数を出力しますが、スクリプトを次のように実行すると、

blah.py argument

エラーが発生:

IndexError ...

したがって、引数はスクリプトに渡されません。

PATH内のpython.exe。PATHにblah.pyがあるフォルダ。
python.exeは、*。pyファイルを実行するデフォルトのプログラムです。

何が問題ですか?


3
コードのスニペットを投稿すると、Googleが役立つ場合があります。
jldupont 2009

クリスタルボールのない人はすでにソリューションを提供しています=)print sys.argv [1]がこのエラーを生成します。
ton4eg 2009

Pythonの複数のバージョンがインストールされている場合は、このstackoverflow.com/questions/1934675/…が必要になることがあります。
laike9m 2014年

レジストリからスクリプトを実行するようにpythonに手動で指示します: "C:\ Python27 \ python.exe" "C:\ Python27 \ tpt.py" "%1" `

回答:


144

先頭に「python」を入力せずにスクリプトを実行する場合、Windowsがプログラムを呼び出す方法について2つのことを知っておく必要があります。最初に、Windowsがどのようなファイルであると考えているかを調べます。

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

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

    C:\> ftype Python.File
    Python.File = "c:\ python26 \ 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/を参照してください

python.exeのレジストリ設定の例 HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandレジストリのパスは、レジストリですでに使用されているpython26.exeか、使用されているかによって異なりpython.exeます。

ここに画像の説明を入力してください HKEY_CLASSES_ROOT\py_auto_file\shell\open\command


30
場合でも、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に、同じ値に設定します。eli.thegreenplace.net/2010/12/14/…を
parvus

5
@parvusあなたのコメントは私にとって究極の解決策でした。関連付けが正しく読み取られていても、これら2つのキーはどちらも正しく設定されていませんでした。
Nathan Cox

1
また、特にAppVeyorテストでPythonスクリプトを実行しようとすると、HKEY_CLASSES_ROOT \ .py \ OpenWithProgidsがVisualStudio関連に設定されているという問題も発生しました。help.appveyor.com/discussions/problems/…を参照してください。
Jack O'Connor

1
同様の問題があります。Anacondaはデフォルトで%*が欠落しているレジストリキーを追加しました
prasad

Win10ではtest.py 123、私は次のように記述して123印刷しsys.argv[1]ます。マイクロソフトは何かを変更しましたか?
Hrvoje T 2018

22

pythonファイルを処理するデフォルトのアプリケーションをpython.exeにする必要があります。

* .pyファイルを右クリックし、[プログラムから開く]ダイアログを選択します。そこで「python.exe」を選択し、「常にこのファイルの種類にこのプログラムを使用する」(そのようなもの)をチェックします。

その後、あなたのpythonファイルは常にpython.exeを使用して実行されます


16

さらに、ファイル名の最後に.py(または.pyw)を入力せずにpythonスクリプトを実行できるようにする場合は、PATHEXT環境変数の拡張子のリストに.PY(または.PY;.PYW)を追加する必要があります。

Windows 7の場合:

コンピュータを右クリックして、
左クリックして、プロパティを
左クリック高度なシステム設定を
左クリックして高度なタブを
左クリック環境変数を...
「システム変数」の下にスクロールを下方あなたはPATHEXTが表示されるまで
、それを強調するためにPATHEXT上でクリックを左
左[編集...]をクリックします。
「変数値」が含まれるように編集します;.PY (Endキーは最後までスキップし
ます)。左クリックOK
左クリックOK
左クリックOK

注1:コマンドプロンプトウィンドウでは、変更を閉じてから再度開いても、変更は表示されません。

注#2:.py.pyw拡張機能の違いは、前者は実行時にコマンドプロンプトを開き、後者は開かないことです。

私のコンピュータで、私は追加しました ;.PY;.PYW、最後の(最低優先度)拡張としてしたので、PATHEXTの「前」と「後」の値は

前: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

ここにいくつかの有益なコマンドがあります:

C:\>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

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

C:\>ftype Python.File
Python.File="C:\Python32\python.exe" "%1" %*

C:\>assoc .pyw
.pyw=Python.NoConFile

C:\>ftype Python.NoConFile
Python.NoConFile="C:\Python32\pythonw.exe" "%1" %*

C:\>type c:\windows\helloworld.py
print("Hello, world!")  # always use a comma for direct address

C:\>helloworld
Hello, world!

C:\>

4

WindowsでPythonスクリプトを実行する方法は?

pylauncherをインストールできます。.py、.pyw、.pyc、.pyoファイルの起動に使用され、複数のPythonインストールをサポートします。

T\:> blah.py argument

PATHEXT環境変数に.py、.pywがある場合、.py拡張子を指定せずにPythonスクリプトを実行できます。

T:\> blah argument

#!複数のバージョンがインストールされている場合、Windowsで必要なPythonバージョンを選択するためのシバン(ヘッダー行)のサポートを追加します。* nix互換の構文を使用できます#! /usr/bin/env python

たとえば、インストールされている最新のPython 3バージョンを使用して実行するには、バージョンを明示的に指定できます。

T:\> py -3 blah.py argument

またsys.argv、副作用として問題を修正する必要があります。


Pythonランチャーはベータ版です。
Nicolas Barbulesco、2015年

@NicolasBarbulesco:PythonランチャーはPython 3.3に含まれています。つまり、これで十分です
jfs

多分。しかし、WindowsにPython 3をインストールできませんでした。多分あなたはここで私を助けることができます。
Nicolas Barbulesco、2015年

4

私は同じ問題に遭遇しましたが、Windowsユーザー(Linuxからのユーザー)向けにコードをパッケージ化する必要があるという状況で発生しました。私のパッケージには、コマンドラインオプションを含む多数のスクリプトが含まれています。

コマンドラインから起動できるように、Windowsユーザーのマシンの適切な場所にこれらのスクリプトをインストールする必要があります。パッケージはおそらくユーザーフレンドリーであるため、ユーザーにレジストリを変更してこれらのスクリプトを実行するよう依頼することは不可能です。

Continuumの人々がAnacondaパッケージに付属しているPythonスクリプトに使用しているソリューションに出くわしました。例としてAnaconda / Scriptsディレクトリを確認してください。

Pythonスクリプトの場合は、testa test.batとaの2つのファイルを作成しますtest-script.py

test.bat次のように見えます(目的に合わせて変更した相対パス.batAnaconda\Scripts呼び出し中のファイルpython.exe):

@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*

test-script.py あなたの実際のPythonスクリプトです:

import sys
print sys.argv

これら2つのファイルをローカルディレクトリに残しておくと、次のようにして.batファイルからPythonスクリプトを呼び出すことができます。

test.bat hello world
['C:\\...\\test-scripy.py', 'hello', 'world']

のような場所に両方のファイルをコピーする場合PATH(などAnaconda\Scripts)、.bat接尾辞を省略してスクリプトを呼び出すこともできます。

test hello world
['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']

免責事項:私は何が起こっているのか、これがどのように機能するのかわかりませんので、説明があれば幸いです。


.bat各Pythonスクリプトのラッパーを作成するのは不便で冗長です。これはお勧めしません。
tripleee 2017

2

のWindows

「python」入力せずにpythonモジュール実行するには

-> python(*。py)ファイルを右クリック

-> open withプロパティを "python.exe"に設定します

->「このファイルタイプには常にこのプログラムを使用する」にチェックを入れてください

-> python.exeのパスを変数環境に追加します。たとえば、C:\ Python27をPATH環境変数に追加します。

「.py」拡張子を入力せずにPythonモジュール実行するには

-> PATHEXTシステム変数を編集し、リストに「.PY」拡張子を追加します。


1

ここで信じられないほど便利な答えが見つかりました:cmdで異なるバージョンのpythonを実行する方法?

少し前にPython 3.3に導入されたWindows用のPythonランチャーユーティリティを使用することをお勧めします。以前のバージョンのPython 2および3で使用するために、作成者のWebサイトから手動で直接ダウンロードしてインストールすることもできます。

入手方法に関係なく、インストール後、すべての標準Pythonファイル拡張子(つまり、.py、.pyw、.pyc、および.pyoファイル)に関連付けられます。コマンドプロンプトで使用するバージョンを明示的に制御できるだけでなく、スクリプトごとにLinux / Unix-y shebang#!/ usr / bin / env pythonXコメントを追加して、スクリプトごとに制御することもできます。あなたのPythonスクリプトの始まり。

JF Sebastianが示唆しているように、Windows用のPythonランチャーは、WindowsでさまざまなバージョンのPythonを起動するための最良かつデフォルトの選択です。以前はサードパーティのツールでしたが、現在はPython 3.3以降、正式にサポートされています。

バージョン3.3の新機能。

Windows用のPythonランチャーは、さまざまなバージョンのPythonの場所と実行を支援するユーティリティです。スクリプト(またはコマンドライン)が特定のPythonバージョンの設定を示すことを可能にし、そのバージョンを見つけて実行します。

これはそれを使うだけの素晴らしいツールです!


0

任意のマップからpython.exeを実行できますか?そうでない場合は、PATH環境にpython.exeの適切な値があるかどうか確認してください

blah.pyと同じディレクトリにいますか?コマンドを発行してこれを確認します-> blah.pyを編集し、このファイルを開くことができるかどうかを確認します

編集:

その場合はできません。(python argは、実行するスクリプトのファイル名であるとPythonが想定するいくつかのパラメータを使用してpython.exeを呼び出すことを意味します)

パスマップにbatファイルの白線を作成し、.batファイルを実行できます

例:
パスマップの1つでblah.py.batを作成し、 ファイルを編集して行を入力します

python C:\Somedir\blah.py

batファイルを実行するときに.bat拡張を配置する必要がないため、任意の場所からblah.pyを実行できるようになりました。


PATH内のpython。そしてPATHにもblah.pyを含むディレクトリ。主なアイデアは、完全なパスを記述せずにpythonスクリプトを実行することです。しかし、今は引数の受け渡しに問題があります。
ton4eg 2009

3
Ralu、この方法でPythonスクリプトを実行するためにバッチファイルは必要ありません。PATHEXT環境変数を使用して、実行可能拡張子として.pyおよび.pywを含めます。この変数が、.batを指定する必要がない理由です。
トッド、

0

それが私が理解したことなら、それはこのようなものです:

C:\Users\(username)\AppData\Local\Programs\Python\Python(version)

python.exeをコピー(削除ではなく)し、名前をpy.exeに変更して実行します。

py filename.py

0

次のコマンドを実行するだけです。

C:>python .\file_name.py

ファイル名が同じフォルダー内にあり、Pythonがすでに環境変数に追加されていると仮定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.