【问题标题】:Pass a list to a Python script as a command line argument将列表作为命令行参数传递给 Python 脚本
【发布时间】:2019-03-11 13:31:00
【问题描述】:

当我想将列表作为参数时,我目前面临一个问题。 列表是这种格式:

[1,0,0,0]

我将在另一个 python 代码中做这样的事情:

os.system('python main.py %s' %([list]))

当我在 main.py 中打印 sys.argv[1] 时,这不是我想要的:它打印了

[1,

如何在main.py 中使用此列表?

【问题讨论】:

  • 我想你应该在这里检查解决方案 - stackoverflow.com/questions/32761999/…
  • @ivan_pozdeev 我不认为它重复
  • @sambasivarao 在不解释原因的情况下没有帮助。我的理由是:OP 正在寻求将非字符串作为参数传递。该问题解决了如何做到这一点。
  • @ivan_pozdeev 问题是当尝试从另一个 python 文件传递​​列表并尝试打印 sys.argv[1] 时,它只打印部分列表,因此它使用由分隔的每个参数一个逗号。

标签: python command-line-arguments


【解决方案1】:

您面临的问题是,当您将列表作为命令行参数传递而不带引号时,python 会将每个逗号分隔值作为单个参数读取。只需在字符串周围加上引号,如下所示

main.py 文件:

import sys
import ast
print sys.argv[1]
print type(ast.literal_eval(sys.argv[1]))

将非字符串作为参数传递:

>>> import os
>>> os.system("python main.py '%s'"%[1,2])
[1, 2]
<type 'list'>
0

将列表或字典作为变量传递:

>>> a = [1,2]
>>> os.system("python main.py '%s'"%a)
[1, 2]
<type 'list'>
0
>>> dic = {1:2,2:3}
>>> os.system("python main.py '%s'"%dic)
{1: 2, 2: 3}
<type 'dict'>
0


编辑

替代解决方案:使用字符串格式

>>>a = [1,2]
>>> os.system("python main.py '{}'".format(a))
[1, 2]
<type 'list'>
0

希望对你有帮助

【讨论】:

  • @ivan_pozdeev 谢谢你的捕获,我不清楚问题是什么,但尝试使用 format()。有关更多信息,请参阅我上面的编辑
猜你喜欢
  • 2014-10-25
  • 2013-08-03
  • 2018-10-16
  • 1970-01-01
  • 2014-03-08
  • 2013-10-22
  • 2016-12-19
  • 1970-01-01
相关资源
最近更新 更多