使用系统PATH从Windows命令行启动Python脚本以获取文件位置

时间:2017-11-22 10:23:45

标签: python windows

这可能是一个普通的Windows问题,而不是Python问题,我不确定。

我有一个名为GDAL(地理空间库)的python文件夹。 GDAL库的位置存储在Windows系统PATH中,因此当我在Windows命令窗口中键入它以检查PATH是否配置正确时:

gdal_retile.py

我得到记事本打开以显示代码,正如我所料,因为这是此电脑上的.py文件的默认应用程序。

如果我这样做:

python gdal_retile.py

它不起作用,它说

  

没有这样的文件或目录

然而,如果我定义完整路径:

python "C:\Program Files\GDAL\gdal_retile.py"

工作正常。 PATH不能用作Python解释器参数的一部分吗?

2 个答案:

答案 0 :(得分:0)

TL:DR; 否。

PATH用于搜索您尝试运行的(可执行)文件。如果文件不可执行(例如,文本文件),Windows将尝试查找注册哪个程序来处理文件的扩展名(在您的情况下为记事本)打开该文件,将文件的路径作为参数传递给它。

找到正确的程序后,首先检查以下所有参数,以便将最终%ENVIRONMENT_VARIABLE%占位符替换为实际值,然后将其视为空格分隔字符串列表并传递给程序启动。然后,程序的任务是弄清楚如何处理它们。 PATH在论证决议中没有发挥作用。

为什么会这样?

程序的参数可以是任何东西。想象一下,您要在当前文件夹中传递要创建的文件的文件名。操作系统如何知道您传入的文件名实际上不是PATH中要搜索的现有文件,而是由程序创建的文件?这就是为什么处理参数的责任完全在于正在启动的程序。

答案 1 :(得分:0)

Python不会在其参数中考虑系统路径,甚至不考虑PYTHONPATH ......

您可以使用where来模拟此问题,以便在路径

中查找脚本
where gdal_retile.py > %TEMP%\fullp

然后用它来设置变量

set /P C=<%TEMP%\fullpath

然后用完整路径调用python

python "%C%"

(这里where命令没有错误检查,它可以返回任何内容或多于1个路径,因此该解决方案可以完成但是方便启动另一个解释器而不是与{相关联的解释器{1}} Windows上的扩展程序)