【问题标题】:Run Python function with input arguments from command line从命令行使用输入参数运行 Python 函数
【发布时间】:2016-08-17 10:05:56
【问题描述】:

我的函数 convert.py 是:

def convert(a,b)
  factor = 2194.2
  return (a-b)*factor

如何使用输入参数 a 和 b 从命令行运行它?
我试过了:

python convert.py 32 46

但出现错误。

我确实尝试在网上找到答案,但我找到了相关的东西但没有答案:

  1. Run function from the command line(堆栈溢出)
  2. How to read/process command line arguments?(堆栈溢出)
  3. http://www.cyberciti.biz/faq/python-command-line-arguments-argv-example/
  4. http://www.saltycrane.com/blog/2007/12/how-to-pass-command-line-arguments-to/

另外,我自己在哪里可以找到答案,以便我可以保存此网站以解决更多重要问题?

【问题讨论】:

  • 你遇到了什么错误?
  • 将a 和b 替换为sys.argv[1] 和sys.argv[2],同时查看argparse
  • 签出this document。
  • 您添加的链接应该有帮助!
  • @petres:具体是哪一个?

标签: python function input command-line arguments


【解决方案1】:

你可以这样做:

import sys
def convert(a,b):
    factor = 2194.2
    return (a-b)*factor
print(convert(int(sys.argv[1]), int(sys.argv[2])))

如果这就是脚本应该做的全部,你不必定义一个函数:

import sys
factor = 2194.2
print((int(sys.argv[1]), int(sys.argv[2])*factor)

如果你想改变你的文件(尽管你必须在函数定义后添加冒号),你可以按照你的第一个链接方法:

python -c 'import convert, sys; print convert.convert(int(sys.argv[1]), int(sys.argv[2])'

【讨论】:

    【解决方案2】:

    有一个 Python 模块可以处理这种事情,称为 argparse,它允许您围绕命令行标志做一些非常奇特的事情。你真的不需要那个 - 你只是在命令行上有两个数字。这可以很天真地处理。

    Python 允许您通过一个名为sys.argv 的数组直接访问命令行参数——您首先需要import sys。该数组中的第一个元素始终是程序名称,但第二个和第三个元素将是您在i.e. sys.argv[1] 和sys.argv[2] 中传递的数字。更完整的例子:

    if len(sys.argv) < 3:
        print 'Didnt supply to numbers'
    a = int(sys.argv[1])
    b = int(sys.argv[2])
    

    当然,您需要进行一些错误检查,以确保它们是实际的整数/浮点数。

    如果您对 sys.argv 感兴趣,请阅读更多内容 here

    为了完整起见,我们也可以举一个 argparse 的例子:

    import argparse
    
    parser = argparse.ArgumentParser(description='')
    parser.add_argument('numbers', type=float, nargs=2,
                                help='Things to perform actions on')
    args = parser.parse_args()
    
    a = args.numbers[0]
    b = args.numbers[1]
    
    print a, b
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2014-02-19
      • 2015-06-05
      • 2015-07-20
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 2017-01-03
      • 2020-12-15
      相关资源
      最近更新 更多