我有一个非常简单的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
是我想要的分辨率。
这在过去有效。现在,当我运行脚本时,没有启动命令提示符。代码不会中断,并且使用位于os.system周围的打印命令。代码根本没有运行os.system gdal命令。
os.system
。答案 0 :(得分:8)
通常,sys
指的是 Python 系统,而不是整个操作系统。由于您尝试在Python之外调用某些内容,因此它属于os
的范围,而不是sys
。
具体来说,sys.path
is for importing Python modules.但是您没有调用Python代码:您正在调用系统shell,即您使用os.system
转义到的Python之外的解释器。在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的系统上,它将是一个冒号。在这两种类型的操作系统上,相关变量可以'PATH'
访问(在Windows上它真的是'Path'
,但很高兴os.environ
提供了一个不区分大小写的接口。)
旁注:os.system
快速,脏,并且正在被弃用。有关替代方案,请参阅Calling an external command in Python