7

私のタイトルは説明的ではないことを知っているので、ここで説明してみましょう。

通常、Python スクリプトを次のように実行します。

D:\github\Miscellaneous-Programs\Python>python check.py -h
hello
['check.py', '-h']

今私がしたことはD:\github\Miscellaneous-Programs\Python、Windowspath環境変数にフォルダーを追加することです。次のようにスクリプトを実行しようとしたよりも:

C:\Users\noob>check -h
hello
['D:\\github\\Miscellaneous-Programs\\Python\\check.py']

-hご覧のとおり、私が提供した引数は表示されませんでした。

じぶんのcheck.py

import sys
print "hello"
print sys.argv

上記の python スクリプトから削除するprint sys.argvと、上記の両方のケースで正常に動作します。つまり、「hello」が正常に出力されます。

したがって、私の質問は、スクリプトが環境変数に追加された後に、いくつかのコマンドライン引数を受け入れる python スクリプトをどのように実行するかです。

私の目的はpython script、Windows コマンド プロンプトのどこからでもmy を実行することchmod +x check.pyです。

cygwin でこのオプションを試してみましたがchmod、どちらの場合でも問題なく動作します。

Cygwin output

noob@noob-PC ~
$ chmod +x check.py

noob@noob-PC ~
$ ./check.py h
['./check.py', 'h']
4

3 に答える 3

5

フォルダを に配置しても、コマンド ラインでPATH記述してスクリプトを実行するときのシステムの動作には影響しません。script.py -hシステムがレジストリを読み取って、指定したコマンドを実行する方法を見つけます。この情報を表示するには、最初に を実行reg query HKCR\.py /veし、次に結果 (通常はPython.File) を取得して を実行しreg query HKCR\Python.File\shell\open\command /veます。私のシステムの出力は"C:\Program Files\Python Launcher (64-bit)\py.exe" "%1" %*. これは、システムがscript.py -hコマンドを認識したときに、最初のパラメーターがスクリプトの名前 (意味) であり、残りのパラメーターがスクリプトに与えられたパラメーターpy.exe(つまり) であるプログラムを実行することを意味します。あなたの問題は、適切なレジストリ エントリの一部が不足していることが原因だと思います。"%1"%*%*

于 2012-04-23T19:15:58.490 に答える
5

Windows には、インタープリターが として指定された実行可能スクリプト ファイルの概念がない#!ため、意図したことは機能しません。ShellExecuteWindows が行うことは、次のことを行うWinAPI 関数を呼び出すことです。

ただし、特定のファイルを操作するアプリケーションを起動するために、より一般的に使用されます。たとえば、.txt ファイルは Microsoft ワードパッドで開くことができます。したがって、.txt ファイルの open 動詞は、次のコマンドのようなものに対応します。

"C:\Program Files\Windows NT\Accessories\Wordpad.exe" "%1"

MSDN を参照

ご覧のとおり、最初のパラメーターのみがアプリケーションに提供されます。あなたの場合、これは次のようなものに変換されます。

"C:\Program Files\Python\Python.exe" "D:\github\Miscellaneous-Programs\Python\check.py"

これを回避するためにできることは、次の.bat名前の小さなファイルを作成することですcheck.bat

python check.py %*

(詳細については、この SO の質問を参照してください。見つからない場合は、check.py または python の絶対パスを指定する必要がある場合もあります)

于 2012-04-23T13:47:03.193 に答える