【问题标题】:Command-line Input (parameters) [duplicate]命令行输入(参数)[重复]
【发布时间】:2014-03-29 21:54:37
【问题描述】:

我对命令行输入的工作方式非常困惑,所以为了练习,我试图将下面的程序放在下面并产生相同的信息,但只是通过使用命令行输入,唯一的问题是我不知道从哪里开始

def main():
    x = (input("Give me a boolean: ").lower() == 'true')
    y = str(input("Give me a string: "))
    z = int(input("Give me a number: "))
    if x == True:
        print (y)
        print ("\"",y,"\"",sep="")
    else:
        print (z*2)



main()

【问题讨论】:

  • @AaronHall,我同意这些问题并不相同,但我很难看到该问题的答案如何也不适用于这个。但是,是的,你找到的那个更好。

标签: python input command-line output


【解决方案1】:

我同意 Charles 使用 argparse。我只是想补充一下,你的主要方法应该是这样的:

def start(var):
    # ... your program start...

def parser():
    # use argparse here
    # ...
    return var

if __name__ == "__main__":
    var = parser()
    start(var)
    # ...

您可以在this question的答案中阅读原因

【讨论】:

  • 不将 var 传递给 start()?可以肯定的是,将命令行解析与运行时执行解耦是一件好事,但是您打算如何准确地获取解析的参数呢?
  • 糟糕,我的错。感谢您的提示:)
【解决方案2】:

为了在不阅读文档的情况下了解事物的工作原理,最好使用交互式解释器。

>>> input("something: ")
something: true
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'true' is not defined
>>> input("something: ")
something: True
True
>>> input("something: ")
something: 12
12
>>> input("something: ")
something: 12.4
12.4
>>> type(input("something: "))
something: 14.3
<type 'float'>
>>> type(input("something: "))
something: 14
<type 'int'>

您会看到,它会将用户写入的内容评估为 Python 值。

【讨论】:

  • 这与问题有什么关系(关于在命令行上接受参数)?
  • 他尝试使用输入功能。
【解决方案3】:

http://docs.python.org/2/library/sys.htmlsys.argv的描述

import sys
x = sys.argv[1].lower() == 'true'
y = sys.argv[2]
z = int(sys.argv[3])

...或者,要以正确的方式做事,请使用 argparse:http://docs.python.org/dev/library/argparse.html

【讨论】:

  • 我的老师一直在教我们 sys.argv,我目前从未见过 argparse 的使用。我对 Python 或任何形式的程序还是很陌生哈哈
猜你喜欢
  • 2013-12-12
  • 2016-02-24
  • 1970-01-01
  • 2014-02-19
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
相关资源
最近更新 更多