96

簡単なスクリプト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ファイルを実行するためのデフォルトのプログラムです。

何が問題ですか?

4

9 に答える 9

145

前に「python」と入力せずにスクリプトを実行する場合、Windowsがプログラムを呼び出す方法について2つのことを知っておく必要があります。1つ目は、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.pyfoo」と入力した場合と同じ結果が得られます。これで、残りの問題を自分で理解できるようになりました。

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

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

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

于 2009-12-20T15:05:41.707 に答える
23

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

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

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

于 2009-12-20T02:32:28.440 に答える
16

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

Windows 7の場合:

コンピュータを右クリックします。
プロパティ
を左クリックします。システムの詳細設定
を左クリックします。[詳細設定]タブ
を左クリックします。[環境変数... ]を左クリックします。[
システム変数]の下で、PATHEXTが表示されるまで下にスクロールします。PATHEXT
を左クリックして強調表示します
。 [編集...]をクリックします。[
変数値]を編集して;.PY 、[終了キーは最後までスキップします)を含め
ます。左クリック[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:\>
于 2012-10-23T05:15:37.943 に答える
4

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

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

T:\> py -3 blah.py argument

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

于 2012-10-23T06:55:25.013 に答える
4

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

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

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

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

test.bat次のようになります(目的に合わせて調整した相対パスを使用して呼び出し中の.batファイル):Anaconda\Scriptspython.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']

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

于 2013-11-20T22:03:43.227 に答える
2

Windowsでは

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

->任意のpython(*。py)ファイルを右クリックします

->openwithプロパティを「python.exe」に設定します

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

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

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

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

于 2015-06-23T03:26:47.370 に答える
1

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

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

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

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

バージョン3.3の新機能。

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

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

于 2014-03-16T16:13:43.797 に答える
0

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

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

編集:

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

パスマップにbatファイルの聖霊降臨祭の行を作成し、.batファイルを実行できます

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

python C:\Somedir\blah.py

batファイルを実行するときに.bat拡張子を付ける必要がないため、どこからでもblah.pyを実行できるようになりました。

于 2009-12-20T02:21:05.243 に答える
0

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

C:>python .\file_name.py

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

于 2018-08-16T14:22:00.290 に答える