2017-04-17 101 views
2

我剛剛開始學習Python,使用學習Python作者Mark Luts。在他的書中,他提供了一個通過Windows shell調用的簡單腳本示例。在這個例子中,他呼籲如下:通過Windows命令行運行Python腳本

C:\code> python script1.py 

我已經走了,修改環境變量在我的機器上,這樣我可以調用

C:\User\Example> python 

開拓的解釋,我也能調用類似

C:\User\Example> script1 

運行我已寫入並放置在所需目錄中的腳本。我的問題是,我不能撥打

C:\User\Example> python script1.py 

在我的命令行中的操作方式與他在本書中的相同。他提到了一些關於PYTHONPATH環境變量的內容,但是,這個變量在我的機器上不存在。我只有'路徑','TEMP'和'TMP'。格外,當我試圖做這樣的電話我得到的錯誤

python: can't open file 'script1.py': [Errno 2] No such file or directory 

我有什麼爲了得到這種命令的命令行上正常工作,怎麼辦?

+0

聽起來像'SCRIPT1的問題。py'不會出現在你的'C:\ User \ Example'目錄中,因爲'PATH'變量已經設置好了,所以'python'可以從命令行調用(因爲你可以這樣做) 。你是否確認你正在腳本所在的目錄中運行'python'命令? – wheeler

+0

@wheeler我在兩個單獨的位置存儲我的python腳本和python解釋器,它們都不是C:\ User \ Example目錄。我已經離開並編輯了我的PATH變量,以將文件路徑包含到保存解釋器的目錄和保存我的腳本的目錄中。例如,我的Python解釋器位於C:\ User \ Example \ Python36目錄中,我的腳本位於C:\ User \ Example \ my_scripts目錄中。 –

+0

'它們都不是C:\ User \ Example目錄'有你的答案。您正在從該目錄調用python,併爲其指定一個文件名稱,該文件不存在於您當前所在的目錄中。由於它只是該文件的名稱,因此它**將存在於您當前所在的文件夾中在命令工作。換句話說,爲了運行'python script1.py',你必須用'cd'實用程序導航到你的'my_scripts'目錄。 – wheeler

回答

0

從書(第44,第4版。):

最後,請記住,如果它生活在從您正在使用一個不同的目錄給的完整路徑腳本。

對於您的情況,這意味着使用

C:\User\Example> python C:\User\Example\my_scripts\script1.py 

你可以編寫一個批處理文件,以查找腳本中預定義的目錄:

@echo off 
setlocal 
PATH=C:\User\Example\Python36;%PATH% 
SCRIPT_DIR=C:\User\Example\my_scripts 
python %SCRIPT_DIR\%* 
+0

這似乎是我誤解爲懷疑。謝謝你澄清這一點。 –

+0

正確安裝的Python 3.6應將.py [w]文件與py.exe啓動程序關聯,並傳遞命令行參數。 py啓動器根據腳本的shebang行處理多個版本的Python。將'C:\ User \ Example \ my_scripts'添加到'PATH'和'.PY'到'PATHEXT'。然後直接運行'script1'。 – eryksun

0

您從C:\User\Example的上下文中調用python,並將它傳遞給想要通過解釋器(script1.py)運行的文件的名稱。很顯然,PATH變量已正確設置,因此您可以從計算機上的任何位置調用python,因爲我們可以看到它正在運行,但實際上無法找到您的腳本。

但是,您在評論中聲明您的腳本實際上位於C:\User\Example\my_scripts。換句話說,你正在通過python一個不存在的文件的名字! (至少從C:\User\Example的角度來看)。

您需要位於腳本的目錄中,以使python可執行文件能夠找到它。

或者,您可以運行python命令併爲其提供有關腳本位置的更多信息。例如,如果您從C:\User\Example的角度內運行並且您的腳本位於C:\User\Example\my_scripts,則可以運行python .\my_scripts\script1.py

+0

因此,沒有辦法在python解釋器中創建一個環境變量,這樣我就可以爲C:\ User \ Example之外的腳本創建一個「默認」位置,例如C:\ User \ Example \ my_scripts,這樣我可以打電話爲'C:\ User \ Example> python script1.py'?就像我在原文中所說的那樣,我的書中提到了一個PYTHONPATH變量,它似乎與我所描述的類似。 –

+0

正確,沒有辦法做到這一點。 PYTHONPATH不按照本書中描述的方式工作。它適用於**導入**模塊,不執行它們。看看[this](http://stackoverflow.com/questions/19917492/how-to-use-pythonpath)SO問題和答案,描述了幾乎相同的情況,並[在這裏](https:// docs。 python.org/2/using/cmdline.html#envvar-PYTHONPATH)是進一步閱讀的參考手冊。 – wheeler

+0

你在用什麼書? – wheeler