【问题标题】:passing in variable to python script run from command prompt将变量传递给从命令提示符运行的 python 脚本
【发布时间】:2019-08-24 03:32:54
【问题描述】:

所以我知道从命令提示符运行脚本的命令是:

python script.py var1 var2

甚至使用包subprocess

import subprocess
subprocess(python script.py var1 var2)

但如果 var1 和/或 var2 是一个列表,我怎么能做到这一点。就像现在一样,如果我们传入var1 as a list: ["test", "test"],那么当我们使用sys.argv[element_number] 捕获它时,列表中的元素似乎被逗号的数量所分解。换句话说,我想传入整个列表,这样我就可以在我正在调用的脚本中将其捕获为变量。

【问题讨论】:

  • 能否请您澄清一下您是否从命令行将此脚本称为python script.py "[ 1, 23, 4, 5]"
  • @lazarus 完全正确

标签: python python-3.x python-2.7 subprocess


【解决方案1】:

您可以使用标准库中的argparse 模块。 Stackoverflow上有很多相关的questions and answers

【讨论】:

    【解决方案2】:

    我想当您在命令行参数中将列表作为字符串传递时。 在通过sys.argv[index] 捕获它时,您遇到了问题,因为它有逗号,因为它是字符串类型。

    您可以将变量解析为所需的列表。

    import sys
    
    def main(*argv, **kwargs):
        if len(sys.argv) < 2:
            print 'Atleast one command line argument required'
    
        first_arg = sys.argv[1]
        # convert it to list
        first_arg_list = list(first_arg)
        # filter it according to requirement 
        first_arg_list_filtered = [ elem for elem in first_arg_list if elem not in '[],' ]
    
    if __name__ == '__main__':
        main()
    

    希望对你有帮助。

    【讨论】:

    • 输出:['[', 't', 'e', 's', 't', ',', '', 't', 'e', 's', 't', ']']
    • ''.join([ x for x in ['[', 't', 'e', 's', 't', ',', '', 't', 'e', 's', 't', ']'] if x not in '[],' ]) 如果这是您为命令行参数提供的内容,则会给出“测试测试”
    猜你喜欢
    • 2011-10-13
    • 2013-12-07
    • 2018-01-11
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多