gpt4 book ai didi

python - 使用参数调用和执行并在 Python 脚本中更有效地获取其 STDOUT

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:07 25 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本获取经度和纬度并通过名为 gdallocationinfo 的可执行文件运行它们。可执行文件将纬度和经度作为其参数,并返回其 STDOUT 作为该坐标的值。我一直在阅读有关子流程的信息,我想知道如果我想运行很多点,这是否是实现它的最有效方法。这似乎需要很长时间。

def gdalgetpointdata(longitude,latitude):
proc = subprocess.Popen(["gdallocationinfo","C:\Users\data\pop","-wgs84","-valonly","{0}".format(longitude),"{0}".format(latitude)], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
return int(out)

有没有更好的方法来调用这个可执行文件,而不必在每次运行我的函数时都创建一个新的子进程?我可以做些什么来加快速度吗?

作为旁注,我知道如果您从命令行运行可执行文件,它将继续接受 STDIN 并在 STDOUT 中提供输出,直到您告诉它退出()

最佳答案

该实用程序可以一次调用多个坐标。例如,准备一个带有坐标对的简单 coords.txt 文本文件:

1.0 2.0
3.0 4.0
5.0 6.0

然后将它从 OSGeo4W shell 中输入输出:

gdallocationinfo -wgs84 -valonly raster.tif < coords.txt > values.txt

这将创建一个包含每个坐标值的 values.txt 文件。您可以使用带有 PIPE stdin 和 stdout 参数的 Popen 执行相同的操作。

coords = [(1.0, 2.0), (3.0, 4.0), (5.0, 6.0)]
coord_txt = ''.join(['{0} {1}\n'.format(*c) for c in coords])
p = subprocess.Popen(
['gdallocationinfo', r'C:\path\to\raster.tif', '-wgs84', '-valonly'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True, shell=True)
values_txt, err = p.communicate(coord_txt)
values = values_txt.splitlines()

values 将是一个值列表,长度与 coords 相同。

关于python - 使用参数调用和执行并在 Python 脚本中更有效地获取其 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com