【问题标题】:sys.path.append not honored for os.system command?sys.path.append 不支持 os.system 命令?
【发布时间】:2016-01-05 16:50:14
【问题描述】:

我有一个非常简单的 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 命令。

  • 请避免在 Python IDE 中讨论直接 GDAL 模块。我一直没有成功。我需要一个快速的答案,它是os.system
  • 其他需要注意的是,自从我去年运行这个脚本以来,我已经安装了另外 2 个 python 版本,(虽然我不认为这是罪魁祸首。)

【问题讨论】:

  • 您的程序 (gdal_translate) 是否在您的 path 环境变量中?

标签: python gdal


【解决方案1】:

通常,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

【讨论】:

  • 谢谢你。 ya os.system 又快又脏。以后会尽量避免。
猜你喜欢
  • 2012-07-16
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2018-07-26
相关资源
最近更新 更多