2017-04-17 81 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