【问题标题】:launching something within python [closed]在python中启动一些东西[关闭]
【发布时间】:2013-02-03 08:16:45
【问题描述】:

好的,你可以看到我的问题,我是 python 的新手。我正在构建一个 python 脚本,基本上我希望它执行这一行

/Library/Frameworks/GDAL.framework/Programs/ogr2ogr -f "GeoJSON" output.json input.shp

如何让 python 像在终端中键入一样执行此操作?
谢谢

【问题讨论】:

  • 为什么这个问题被否决了?堆栈溢出标准还不够好吗?
  • 我没有投反对票,但我猜这是因为它与以前的堆栈溢出问题(如 this one)重复,可以通过(例如)谷歌搜索“启动命令行 Python”轻松找到"

标签: python


【解决方案1】:
import os
os.system('/Library/Frameworks/GDAL.framework/Programs/ogr2ogr -f "GeoJSON" output.json input.shp')

最近推荐使用subprocess包:

subprocess.call(['/Library/Frameworks/GDAL.framework/Programs/ogr2ogr', '-f',
                 '"GeoJSON"', 'output.json', 'input.shp'])

【讨论】:

  • 顺便说一句。 python 是等待执行完成还是只是将进程分叉到操作系统?
  • @tomasz: os.system 等待它完成。如果要分叉该进程,请使用subprocess.Popen
  • 谢谢大卫!我可以在 9 分钟内接受你的分析 =)
【解决方案2】:

我无法发表评论,但想补充一下上述答案:
subprocess 包允许返回句柄,您可以通过该句柄确定命令是否成功执行。这在您的脚本后面可能很重要:

import subprocess  
COMMAND = '/Library/Frameworks/GDAL.framework/Programs/ogr2ogr -f "GeoJSON" output.json input.shp'  
return_code = subprocess.call(COMMAND, shell=True)  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2016-04-25
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多