【问题标题】:Passing variables at runtime在运行时传递变量
【发布时间】:2013-07-17 07:28:13
【问题描述】:

我希望在运行时将一些变量传递给 python

python add2values.py 123 124

然后在 python 脚本中,它将把这两个值加在一起。

python add2values.py a=123 b=124

然后在 python 脚本中,它将把这两个值加在一起。

【问题讨论】:

标签: python


【解决方案1】:

您可以使用sys.argv

test.py

#!/usr/bin/env python

import sys
total = int(sys.argv[1]) +  int(sys.argv[2])
print('Argument List: %s' % str(sys.argv))
print('Total : %d' % total)  

运行以下命令:

$ python test.py 123 124
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']
Total : 247

【讨论】:

  • 有没有像 a=123 b=312 这样更干净的方法
【解决方案2】:

有几种方法可以处理命令行参数。

正如建议的那样,一个是sys.argv:来自命令行参数的字符串数组。如果您想对不同类型的参数执行任意操作,请使用此选项。您可以将前两个参数转换为整数并使用以下代码打印它们的总和:

import sys
n1 = sys.argv[1]
n2 = sys.argv[2]

print (int(n1) + int(n2))

当然,这不会检查用户是否输入了字符串、列表或整数,并会带来TypeError 的风险。但是,对于一系列命令行参数,这可能是您最好的选择 - 手动处理每种情况。

如果您的脚本/程序具有固定参数并且您希望拥有更多灵活性(短选项、长选项、帮助文本),那么值得查看 optparseargparse(需要 Python 2.7 或更高版本)模块。下面是一些涉及这两个模块的sn-ps代码,取自本网站上的实际问题。

import argparse

parser = argparse.ArgumentParser(description='my_program')
parser.add_argument('-verbosity', help='Verbosity', required=True)

optparse,可用于早期版本的 Python,语法相似:

from optparse import OptionParser

parser = OptionParser()
...
parser.add_option("-m", "--month", type="int",
              help="Numeric value of the month", 
              dest="mon")

如果您更喜欢类似 C 的语法,甚至还有 getopt...

【讨论】:

    【解决方案3】:

    argparse 模块让您可以轻松编写简单的命令行界面,并且非常灵活。它会处理诸如检查输入变量是否属于您指定的正确类型之类的事情,并让您更容易继续编写程序。

    first example 甚至演示了一个类似的程序,该程序将接受要求和的字符串列表。

    【讨论】:

    • 移除+1;更多细节值得包括;)
    【解决方案4】:

    我认为您的意思是通过命令行参数传递参数。代码:

    import sys 
    print int(sys.argv[1]) + int(sys.argv[2])
    

    【讨论】:

      【解决方案5】:

      你可以这样做:

      import sys
      n1 = int(sys.argv[1])
      n2 = int(sys.argv[2])
      
      answer = n1 + n2
      print answer
      

      【讨论】:

      • sys.argv(1) 尝试以1 作为参数调用argv 函数:TypeError: 'list' object is not callable.
      • 抱歉,不记得 sys.argv 是一个列表
      【解决方案6】:

      使用sys 模块。这将添加给定的任何参数:

      import sys
      print sum(map(int, sys.argv[1:]))
      

      必须使用map(),因为sys.argv 中的所有元素都是字符串。我们还必须对列表进行切片,因为第一个元素将是脚本名称。

      运行时:

      $ python myfile.py 123 124
      247
      $ python myfile.py 1 2 3
      6
      

      【讨论】:

      • 有没有更简单的方法?比如 a=123,b=124
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 2015-09-01
      • 1970-01-01
      • 2022-10-25
      • 2019-05-27
      相关资源
      最近更新 更多