代码之家  ›  专栏  ›  技术社区  ›  Tom

sys.path。操作系统不支持append。系统命令?

  •  2
  • Tom  · 技术社区  · 10 年前

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

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

    我的操作系统。系统命令是

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

    哪里 fullPDF 是目标PDF的完整路径, fullNewName 和'是一样的。tif“替换为”。pdf'和 res 是我想要的决心。

    这在过去是有效的。现在,当我运行脚本时,不会启动任何命令提示符。代码不会中断,打印命令位于操作系统周围。系统。代码只是没有运行操作系统。系统gdal命令。

    • 请避免讨论Python IDE中的直接GDAL模块。我在这条路上走得不成功。我需要一个快速的答案 os.system .
    • 其他需要注意的是,自从我去年运行这个脚本以来,我又安装了两个python版本(尽管我不认为这是罪魁祸首)
    1 回复  |  直到 10 年前
        1
  •  9
  •   Community Mohan Dere    9 年前

    通常地 sys 指的是 蟒蛇 系统,而不是整个操作系统。由于您试图调用Python之外的东西,因此它属于 os 系统 .

    明确地 sys.path is for importing Python modules. 但您不是在调用Python代码:您是在调用系统shell,即您要使用转义到的Python之外的解释器 os.system 。在Windows上,这是 cmd.exe 。系统外壳不使用 搜索路径 ; 相反,它的路径在环境变量中指定 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 提供大小写不变的接口)。

    旁注: 操作系统 速度快、脏兮兮的,正在被弃用。有关备选方案,请参见 Calling an external command in Python