【问题标题】:Command line array argument into a python script命令行数组参数到 python 脚本
【发布时间】:2021-10-21 10:05:25
【问题描述】:

我想创建一个 python 脚本并解析一个命令行参数列表。

具体来说,我想给它以下参数并将它们作为数组读取。像这样的:

run script.py (['file1.ascii', float_12, float_13, float_14, float_15, float_16], \
               ['file2.ascii', float_22, float_23, float_24, float_25, float_26] )

输入数组在哪里:

input_array = (['file1.ascii', float_12, float_13, float_14, float_15, float_16], \
               ['file2.ascii', float_22, float_23, float_24, float_25, float_26] )

在脚本内部,我想做一个“for循环”并以这种方式分配变量:

for i in range(0, len(input_array) ): 
 variable_1 = 'filei.ascii'
 variable_2 = float_i2
 variable_3 = float_i3
 variable_4 = float_i4
 variable_5 = float_i5
 variable_6 = float_i6
 #do my calculations

【问题讨论】:

  • 改掉使用for i in range(list)):的习惯,改用for item in list:。
  • 请注意,命令行参数列表只是一个平面字符串数组。你不能在那里传递任何其他东西——没有嵌套数组,没有非字符串数据类型——而不需要在平面字符串数组之间进行转换。
  • 也就是说,如果每个内部数组始终正好是六个项目,那么您只需将较大的数组拆分为较小的 6 项数组,将每个此类内部数组中除第一个元素之外的所有元素转换为浮点数,你就完成了。一个能描述您在哪里遇到问题的狭隘问题将是一个更好的起点。
  • 我想劝阻以 Python 列表/元组的格式对 args 进行这种非标准使用。使用经典标志和单个参数或接受来自标准格式(如 JSON)的文件的结构更为常见。关于您的用例的更多信息很好,因此我们可以帮助您避免xy problem。使用variable_n 也是一种反模式——使用list,通过lst[n] 访问。见How do I create variable variables?
  • (请注意,run script.py (["string here", 1.23], ["another string", 4.56]) 甚至不是有效的 shell 语法,因此您实际上无法执行此操作)

标签: python arrays command-line-arguments


【解决方案1】:

您可以将数组转换为 JSON。

在调用脚本中,执行:

import json, subprocess

args = json.dumps(
    ['file1.ascii', float_12, float_13, float_14, float_15, float_16],
    ['file2.ascii', float_22, float_23, float_24, float_25, float_26] 
)
subprocess.run(['python', 'script.py', args])

在script.py 中解析 JSON

import json, sys

input_array = json.loads(sys.argv[1])
for filename, var1, var2, var3, var4, var5 in input_array:
    # do stuff

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2021-02-04
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多