【问题标题】:Running Python scripts through the Windows Command Line通过 Windows 命令行运行 Python 脚本
【发布时间】:2017-09-13 03:18:08
【问题描述】:

我刚刚开始使用 Mark Luts 的 Learning Python 学习 Python。在他的书中,他提供了一个通过 Windows shell 调用的简单脚本的示例。在示例中,他调用如下:

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

我需要做什么才能让这类命令在命令行上正常工作?

【问题讨论】:

  • 听起来像是script1.py 不在您的C:\User\Example 目录中的问题,因为似乎设置了PATH 变量以便可以从命令行调用python (因为你可以这样做)。您是否确认您在脚本所在的同一目录中运行 python 命令?
  • @wheeler 我将我的 python 脚本和 python 解释器存储在两个不同的位置,它们都不是 C:\User\Example 目录。我已经编辑了我的 PATH 变量以包含到保存我的解释器的目录和保存我的脚本的目录的文件路径。例如,我的 Python 解释器位于 C:\User\Example\Python36 目录中,而我的脚本位于 C:\User\Example\my_scripts 目录中。
  • neither of them being the C:\User\Example directory 这就是你的答案。您正在从该目录调用 python,给它一个您当前所在目录中不存在的文件的名称。由于它只是文件的名称,它 必须 存在于文件夹中您目前正在使用该命令。换句话说,您必须使用cd 实用程序导航到您的my_scripts 目录才能运行python script1.py

标签: python windows shell command-line scripting


【解决方案1】:

来自本书(第 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\%*

【讨论】:

  • 看来我误读了。感谢您澄清这一点。
  • 正确安装的 Python 3.6 应该将 .py[w] 文件与 py.exe 启动器相关联并传递命令行参数。 py 启动器根据脚本的 shebang 行处理运行多个版本的 Python。添加C:\User\Example\my_scriptsPATH.PYPATHEXT。然后直接运行script1
【解决方案2】:

您从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 变量,它的功能似乎与我所描述的类似。
  • 正确,没有办法做到这一点。 PYTHONPATH 不能按照书中描述的方式工作。它适用于 importing 模块,而不是执行它们。查看描述几乎相同情况的this SO question and answer,here 是进一步阅读的参考手册。
  • 你在用什么书?
  • 我正在使用 Mark Lutz 的 Learning Python。也许我误解了正在发生的事情。我去看看。
最近更新 更多