単純なスクリプト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ファイルを実行するデフォルトのプログラムです。
何が問題ですか?
前に「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/ を参照してください
HKEY_CLASSES_ROOT\Applications\python.exe\Shell\open\command
レジストリパスは異なる場合があります。python26.exe
またはpython.exe
を使用するか、レジストリに既にあるものを使用します。
pythonファイルを処理するデフォルトのアプリケーションをpython.exeにする必要があります。
* .pyファイルを右クリックして、[アプリケーションから開く]ダイアログを選択します。そこで「python.exe」を選択し、「このファイルの種類に対して常にこのプログラムを使用する」(そのようなもの)をチェックします。
pythonファイルは常にpython.exeを使用して実行されます
また、ファイル名の最後に.py
(または.pyw
)を入力せずにpythonスクリプトを実行できるようにするには、.PY
(または.PY;.PYW
)を拡張子のリストに追加する必要がありますPATHEXT環境変数。
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:\>
同じ問題が発生しましたが、Windowsユーザー(Linuxから)用にコードをパッケージ化する必要があるという状況でした。私のパッケージには、コマンドラインオプション付きの多数のスクリプトが含まれています。
これらのスクリプトがWindowsユーザーのマシンの適切な場所にインストールされ、コマンドラインから起動できるようにする必要があります。パッケージはユーザーフレンドリーであるため、これらのスクリプトを実行するためにレジストリを変更するようユーザーに要求することは不可能です。
Continuumの人々がAnacondaパッケージに付属するPythonスクリプトに使用するソリューションに出会いました。例については、Anaconda/Scriptsディレクトリを確認してください。
Pythonスクリプトtest
の場合、2つのファイルを作成します:test.bat
とtest-script.py
。
test.bat
は次のようになります(.bat
のAnaconda\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']
免責事項:何が起こっているのか、これがどのように機能するのかわからないので、説明をいただければ幸いです。
WindowsでPythonスクリプトを実行する方法は?
pylauncher をインストールできます。 .py、.pyw、.pyc、.pyoファイルの起動に使用され、複数のPythonインストールをサポートします。
T\:> blah.py argument
PATHEXT環境変数に.py、.pywがある場合、.py拡張子を指定せずにPythonスクリプトを実行できます。
T:\> blah argument
複数のバージョンがインストールされている場合、Windowsで目的のPythonバージョンを選択するためのShebang(#!
ヘッダー行)のサポートが追加されます。 * nix互換の構文#! /usr/bin/env python
を使用できます。
たとえば、インストールされている最新のPython 3バージョンを使用して実行するように、バージョンを明示的に指定できます。
T:\> py -3 blah.py argument
また、副作用としてsys.argv
の問題を修正する必要があります。
オンWindows、
「python」と入力せずにpythonモジュールを実行する、
->任意のpython(*。py)ファイルを右クリックします
->「with with」プロパティを「python.exe」に設定します
->「このファイルの種類に常にこのプログラムを使用する」をチェックします
-> python.exeのパスを変数環境に追加します。 C:\ Python27をPATH環境変数に追加します。
宛先「。py」拡張子を入力せずにpythonモジュールを実行
-> PATHEXTシステム変数を編集し、「。PY」拡張子をリストに追加します。
信じられないほど便利な答えを見つけました ここ :cmdで異なるpythonバージョンを実行する方法?
Python 3.3以前に導入されたPython Launcher for Windowsユーティリティを使用することをお勧めします。また、以前のバージョンのPython 2および3で使用するために、作成者のWebサイトから直接手動でダウンロードしてインストールすることもできます。
取得方法に関係なく、インストール後、すべての標準Pythonファイル拡張子(つまり、.py、.pyw、.pyc、および.pyoファイル)に関連付けられます。コマンドプロンプトでどのバージョンを使用するかを明示的に制御できるだけでなく、Linux/Unix-y Shebang#!/ usr/bin/env pythonXコメントを追加することで、スクリプトごとにPythonスクリプトの始まり。
J.F. Sebastianが示唆するように、 Windows用Pythonランチャー は、WindowsでPythonの異なるバージョンを起動するための最良かつデフォルトの選択肢です。以前はサードパーティのツールでしたが、現在はPython 3.3以降、公式にサポートされています。
バージョン3.3の新機能。
Windows用のPythonランチャーは、さまざまなPythonバージョンの場所と実行を支援するユーティリティです。これにより、スクリプト(またはコマンドライン)が特定のPythonバージョンの設定を示すことができ、そのバージョンを見つけて実行します。
これはちょうどそれを使用する素晴らしいツールです!
それが私が理解したものであれば、それは次のようなものです:
C:\Users\(username)\AppData\Local\Programs\Python\Python(version)
Python.exeを(削除ではなく)コピーし、py.exeに名前を変更して実行します。
py filename.py
任意のマップからpython.exeを実行できますか?そうでない場合は、PATH環境のpython.exeに適切な値があるかどうかを確認してください。
Blah.pyと同じディレクトリにいますか。コマンドを発行してこれを確認します-> blah.pyを編集し、このファイルを開くことができるかどうかを確認します
編集:
その場合はできません。 (python argは、pythonが実行したいスクリプトのファイル名であると仮定するいくつかのパラメーターでpython.exeを呼び出すことを意味します)
パスマップにbat file whit linesを作成し、.batファイルを実行できます。
例:
パスマップの1つで、blah.py.batファイルを編集し、行を挿入します
python C:\Somedir\blah.py
Batファイルを実行するときに.bat拡張子を付ける必要がないため、任意の場所からblah.pyを実行できるようになりました。
コマンドを実行するだけです:
C:>python .\file_name.py
ファイル名が同じフォルダー内にあり、Pythonが環境変数に既に追加されていると仮定します。