我知道已经有人问过一个非常相似的问题,但由于那里发布的解决方案都没有解决我的问题,我尝试使其可复制:
所以我调用这个脚本来合并一些 shapefile(一个文件夹中的所有文件),如下所示:
shpfiles = 'shapefile_a.shp shapefile_b.shp'
subprocess.call(['python', 'shapemerger.py', '%s' % shpfiles])
我只从脚本中获取使用说明,所以我无法确定出了什么问题。如果我直接在终端中调用脚本,它就可以工作。任何帮助表示赞赏。
每次启动程序时,它都会收到一个调用它的参数列表。这通常称为 argv(v
代表向量,即一维数组)。程序解析这个列表,根据它自己的调用语法提取选项、参数、文件名等。
在命令行上工作时,shell 负责解析输入行、启动一个或多个新程序并将它们的参数列表传递给它们。
当一个程序被另一个程序调用时,调用者负责提供正确的参数。它可以将这项工作委托给 shell。它的价格非常高。存在大量开销并可能存在安全风险!尽可能避免这种方法。
最后回答问题本身:
shpfiles = 'shapefile_a.shp shapefile_b.shp'
subprocess.call(['python', 'shapemerger.py', '%s' % shpfiles])
这将调用python
以shapemerger.py
一个参数运行脚本shapefile_a.shp shapefile_b.shp
。该脚本需要文件名并接收这个名称。文件“shapefile_a.shp shapefile_b.shp”不存在,但脚本可能会在尝试访问该文件之前停止,因为它需要处理 2 个或更多文件。
正确的方法是将每个文件名作为一个参数传递。假设shpfiles
是一个空格分隔的列表:
subprocess.call(['python', 'shapemerger.py'] + shpfiles.split())
将生成一个包含 4 个项目的列表。如果文件名中有空格,则此方法将失败,了解这一点很重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句