2012-04-23 65 views
5

我知道我的標題不具有描述性,所以讓我試着在這裏解釋它。當從Windows上的PATH運行時,Python腳本丟失參數

通常我執行我的python腳本是這樣的:

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

我做什麼現在是添加的文件夾D:\github\Miscellaneous-Programs\Python在我的Windows path環境變量。比我試圖執行我的腳本是這樣的:正如你所看到

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它的工作在我上面提到的即兩種情況很好,它打印「你好」就好了。

所以,我的問題是,如何在腳本添加到環境變量後執行一個接受一些命令行參數的python腳本。

我的目的是從任何地方的窗戶命令提示符這有點類似於chmod +x check.py執行我python script

我嘗試了在cygwin中的chmod選項,它對兩種情況均正常工作。

Cygwin output

[email protected] ~ 
$ chmod +x check.py 

[email protected] ~ 
$ ./check.py h 
['./check.py', 'h'] 
+2

讓.bat文件方含'蟒蛇完全\路徑\爲\ check.py'並添加含有蝙蝠爲'Path'(你可能想要把目錄'呼應off'在蝙蝠的開始。 – khachik 2012-04-23 13:43:59

+0

我建議改變標題的東西多一點的描述,例如「運行從PATH一個Python腳本刪除所有,但第一個命令行參數」有同樣的問題,以便其他人會找到它。 – mensi 2012-04-23 14:04:12

+0

當時真的'C:\用戶\小白>檢查-h'不'C:\用戶\小白> check.py -h' – 2012-04-23 18:45:24

回答

6

Windows沒有可執行的腳本文件的概念與定爲#!解釋,所以你打算做什麼都不能正常工作。哪些Windows確實是調用WinAPI的功能ShellExecute其執行以下操作:

然而,更常用來啓動該 上的特定文件操作的應用。例如,Microsoft WordPad可以打開.txt文件 。因此 開放動詞的.txt文件將對應於類似下面的命令:

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

see MSDN

正如你所看到的,只有第一參數提供給應用程序。在你的情況,這相當於沿着線的東西:

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

,你能做些什麼來避免這種情況是創建一個小.bat文件名爲check.bat

python check.py %* 

(詳情請參見this SO question 。您可能還必須提供檢查的絕對路徑。PY或Python,如果他們無法找到)

+0

感謝,因爲它的工作如你所說,我會acccept你的答案只是在等待一些其它備選建議的答覆:。d – RanRag 2012-04-23 13:57:19

+0

* Windows沒有可執行的腳本文件與概念解釋器是以#!形式給出的,所以你打算做的事情是行不通的* Windows並沒有確實的shebang概念,但這並不意味着你不能通過在命令行上給出它們的名字來運行各種腳本。順便說一句,有一個很好的工具,它使shebang在Windows中工作 - [Python啓動器](https://bitbucket.org/vinay.sajip/pylauncher/)。 – 2012-04-23 18:50:57

+0

'ShellExecute'是系統在執行命令如'script.py -h'的過程中使用的WinAPI函數,不知道系統如何使用這個函數不能描述整個過程。你的回答是錯誤的。 – 2012-04-23 18:58:03

4

把對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"手段)和參數被賦予腳本的人的休息(這就是%*)表示。我想你的問題是由於在註冊表項中缺少%*部分造成的。

+0

我的輸出爲'regquery':'(默認)REG_SZ「C:\ Python26 \ python.exe」「%1」%*'。所以。它不缺少'%*' – RanRag 2012-04-24 01:03:44

+0

這對我來說非常有幫助。 – class 2014-02-27 00:40:26

+0

直到最近我還沒有遇到這個問題,但是我最近在包含Python啓動器的新計算機上安裝了Python 3.4,現在感謝這個答案發現'.py'文件的註冊表項(使用文件類' py_auto_file',顯然)由於某種原因沒有添加'%*'。 – JAB 2014-04-10 18:55:13