sys.path.append 不接受 os.system 命令?

sys.path.append not honored for os.system command?

我有一个非常简单的 python 脚本,它使用 os.system 到 运行 GDAL 命令。它是 -> 列出目标文件 -> 循环它们 -> 尝试 os.system gdal_translate 命令。过去我只是在脚本的顶部有一行

sys.path.append(r"C:\OSGeo4w\bin")

我的 os.system 命令是

os.system("gdal_translate -of GTiff "+fullPFD+" "+fullNewName+" "+"-co COMPRESS=NONE --config GDAL_PDF_DPI "+res)

其中 fullPDF 是目标 PDF 的完整路径,fullNewName 是用 '.tif' 代替 '.pdf' 的相同内容,res 是分辨率 I想要。

这在过去有效。现在,当我 运行 脚本时,没有启动命令提示符。代码没有中断,并且使用了位于 os.system 周围的打印命令。代码根本不是 运行ning os.system gdal 命令。

一般来说,sys指的是Python系统,而不是整个操作系统。由于您试图调用 Python 之外的东西,它属于 os 的权限,而不是 sys.

具体来说,sys.path is for importing Python modules. 但您没有调用 Python 代码:您正在调用系统 shell,即您所在的 Python 之外的解释器使用 os.system 转义。在 Windows 上,这是 cmd.exe。系统shell没有使用sys.path;相反,它的路径在环境变量 PATH.

中指定

可以从 Python 访问环境变量——在这种情况下,您可以查询并更改其值 os.environ['PATH']。它的值是一个字符串,而不是一个列表,所以你不能.append()。相反,你可以这样说:

bin_directory = r"C:\OSGeo4w\bin"
os.environ['PATH'] += os.path.pathsep + bin_directory

在Windows上,os.path.pathsep是分号。在 POSIX-like 系统上,它将是一个冒号。在两种类型的 OS 上,相关变量都可以作为 'PATH' 访问(在 Windows 上它实际上是 'Path',但令人高兴的是 os.environ 提供了一个 case-invariant接口)。

旁注:os.system 快速、肮脏,并且即将被弃用。有关替代方案,请参阅 Calling an external command in Python