在Windows命令行中运行Python脚本

3

我刚开始学习Python,使用的是Mark Luts的《学习Python》。在他的书中,他提供了一个通过Windows shell调用的简单脚本示例。在这个示例中,他通过以下方式进行调用:

C:\code> python script1.py

我已经修改了我的电脑上的环境变量,以便我可以调用
C:\User\Example> python

打开解释器,我也可以调用类似以下的内容。
C:\User\Example> script1

我想要运行我写好并放置在我目标文件夹中的脚本。但是问题在于我无法调用它。

C:\User\Example> python script1.py

在我的命令行中,我像书中描述的一样执行操作。他提到了一个PYTHONPATH环境变量,但是我机器上没有这个变量。我的机器上只有'path'、'TEMP'和'TMP'。尤其是当我尝试进行此类调用时,我会收到以下错误信息:

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

我需要在命令行上运行这种命令,该怎么做才能使其正常工作?

看起来你的 C:\User\Example 目录下没有 script1.py 文件,因为 PATH 变量已经设置好了,所以可以从命令行中调用 python(因为你已经这样做了)。你确定你是在脚本所在的同一目录下运行 python 命令吗? - wheeler
@wheeler 我将我的Python脚本和Python解释器存储在两个不同的位置,它们都不是C:\User\Example目录。我已经编辑了我的PATH变量,将文件路径添加到保存解释器和脚本的目录中。例如,我的Python解释器位于C:\User\Example\Python36目录中,我的脚本位于C:\User\Example\my_scripts目录中。 - Alden Bernitt
这就是你的答案。你正在从该目录调用Python,给它一个在当前目录中不存在的文件名。由于它只是文件名,所以该命令必须在您当前所在的文件夹中存在才能工作。换句话说,您必须使用cd实用程序导航到my_scripts目录,以便运行python script1.py。而不是C:\ User \ Example目录中的任何一个。 - wheeler
2个回答

2

从书中(第4版第44页):

最后,记得如果你的脚本不在你工作的目录下,请给出完整的路径。

对于您的情况,这意味着使用:

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\%*

看起来我误读了,正如我所怀疑的那样。谢谢你澄清这个问题。 - Alden Bernitt
一个正确安装的Python 3.6应该将.py[w]文件与py.exe启动器关联,并传递命令行参数。py启动器处理基于脚本的shebang行运行多个Python版本的情况。将C:\User\Example\my_scripts添加到PATH,并将.PY添加到PATHEXT。然后直接运行script1 - Eryk Sun

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


那么在python解释器中是否没有办法创建一个环境变量,以便我能够拥有一个“默认”位置来存储我的脚本,而不是C:\ User \ Example,例如C:\ User \ Example \ my_scripts,以便我能够进行这样的调用,如'C:\ User \ Example> python script1.py'?正如我在原帖中所说,我的书提到了一个名为PYTHONPATH的变量,它似乎可以像我所描述的那样发挥作用。 - Alden Bernitt
正确的,没有办法做到这一点。PYTHONPATH不像书中描述的那样工作。它适用于导入模块,而不是执行它们。请查看这个 SO问题和答案,描述了一个非常相似的情况,以及这里是参考手册供进一步阅读。 - wheeler
你在用哪本书? - wheeler
我正在使用Mark Lutz的《学习Python》。也许我误解了发生的事情。我会去复查一下。 - Alden Bernitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接