Python;如何正确调用另一个 python 脚本作为子进程
Python; how to properly call another python script as a subprocess
我知道已经有人问过一个非常相似的问题,但是由于 there 发布的解决方案中有 there 解决了我的问题,所以我尝试使其可复制:
所以我这样调用 this script to merge some shapefiles(一个文件夹中的所有文件):
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])
这将使用一个参数 shapefile_a.shp shapefile_b.shp
调用 python
到 运行 脚本 shapemerger.py
。该脚本需要文件名并接收这个名称。文件 "shapefile_a.shp shapefile_b.shp" 不存在,但脚本可能会在尝试访问该文件之前停止,因为它希望处理 2 个或更多文件。
正确的方法是将每个文件名作为一个参数传递。假设 shpfiles
是一个白色 space 分隔列表:
subprocess.call(['python', 'shapemerger.py'] + shpfiles.split())
将生成一个包含 4 个项目的列表。重要的是要了解,如果文件名中有 space,此方法将失败。
我知道已经有人问过一个非常相似的问题,但是由于 there 发布的解决方案中有 there 解决了我的问题,所以我尝试使其可复制:
所以我这样调用 this script to merge some shapefiles(一个文件夹中的所有文件):
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])
这将使用一个参数 shapefile_a.shp shapefile_b.shp
调用 python
到 运行 脚本 shapemerger.py
。该脚本需要文件名并接收这个名称。文件 "shapefile_a.shp shapefile_b.shp" 不存在,但脚本可能会在尝试访问该文件之前停止,因为它希望处理 2 个或更多文件。
正确的方法是将每个文件名作为一个参数传递。假设 shpfiles
是一个白色 space 分隔列表:
subprocess.call(['python', 'shapemerger.py'] + shpfiles.split())
将生成一个包含 4 个项目的列表。重要的是要了解,如果文件名中有 space,此方法将失败。