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 命令。
- 请避免在 Python IDE 中讨论直接 GDAL 模块。我一直没有成功地走那条路。我需要一个快速的答案,即
os.system
.
- 其他需要注意的事情是,自从我去年 运行 这个脚本以来,我又安装了 2 个 python 版本,(虽然我不认为那是罪魁祸首。)
一般来说,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
我有一个非常简单的 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 命令。
- 请避免在 Python IDE 中讨论直接 GDAL 模块。我一直没有成功地走那条路。我需要一个快速的答案,即
os.system
. - 其他需要注意的事情是,自从我去年 运行 这个脚本以来,我又安装了 2 个 python 版本,(虽然我不认为那是罪魁祸首。)
一般来说,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