用户输入和命令行参数

Tei*_*ion 504 python input command-line-arguments

我如何拥有a)可以接受用户输入的Python脚本以及如何使用b)如果从命令行运行,则读入参数?

Ant*_*nen 465

要读取用户输入,您可以尝试使用cmd模块轻松创建一个迷你命令行解释器(带有帮助文本和自动完成)和raw_input(input用于Python 3+)从用户读取一行文本.

text = raw_input("prompt")  # Python 2
text = input("prompt")  # Python 3
Run Code Online (Sandbox Code Playgroud)

命令行输入在sys.argv.在你的脚本中尝试这个:

import sys
print (sys.argv)
Run Code Online (Sandbox Code Playgroud)

解析命令行选项有两个模块:( optparse自Python 2.7起不推荐使用,argparse代替使用)和getopt.如果您只想将文件输入脚本,请注意其功能fileinput.

Python库参考是你的朋友.

  • `raw_input`在Python 3.x中被重命名为`input` - [这里的文档](http://docs.python.org/py3k/whatsnew/3.0.html#builtins) (69认同)
  • 我最喜欢的来源:http://www.tutorialspoint.com/python/python_command_line_arguments.htm 这看起来也不错:http://www.cyberciti.biz/faq/python-command-line-arguments-argv-example / (2认同)

lbz*_*lbz 461

var = raw_input("Please enter something: ")
print "you entered", var
Run Code Online (Sandbox Code Playgroud)

或者对于Python 3:

var = input("Please enter something: ")
print("You entered: " + var)
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,你不必导入`raw_input`,它是一个内置函数. (25认同)
  • 您不必在打印串联中使用str(),因为默认情况下所有输入的数据都是str(ing)类型(偶数). (7认同)

ste*_*red 202

raw_input在Python 3.x中不再可用.但是raw_input重命名了input,所以存在相同的功能.

input_var = input("Enter something: ")
print ("you entered " + input_var) 
Run Code Online (Sandbox Code Playgroud)

变更的文件

  • 在Python 2.7中,input()不会将值转换为字符串.因此,如果您尝试这样做:input_variable1 = input("输入第一个单词或短语:"),您将收到一个错误:Traceback(最近一次调用last):return eval(raw_input(prompt))File"<string> ",第1行,<module> NameError:name'bad'未定义 (24认同)

Dav*_*ebb 33

处理命令行参数的最佳方法是argparse模块.

使用raw_input()来获取用户输入.如果您导入readline module您的用户将具有行编辑和历史记录.

  • argparse是新的optparse (4认同)

Vha*_*run 18

小心不要使用该input功能,除非你知道你在做什么.不同raw_input,input将接受任何python表达式,所以它有点像eval


Vis*_*esn 15

这个简单的程序可以帮助您了解如何从命令行提供用户输入,并显示有关传递无效参数的帮助.

import argparse
import sys

try:
     parser = argparse.ArgumentParser()
     parser.add_argument("square", help="display a square of a given number",
                type=int)
    args = parser.parse_args()

    #print the square of user input from cmd line.
    print args.square**2

    #print all the sys argument passed from cmd line including the program name.
    print sys.argv

    #print the second argument passed from cmd line; Note it starts from ZERO
    print sys.argv[1]
except:
    e = sys.exc_info()[0]
    print e
Run Code Online (Sandbox Code Playgroud)

1)找到5的平方根

C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
Run Code Online (Sandbox Code Playgroud)

2)传递除数字以外的无效参数

C:\Users\bgh37516\Desktop>python -i emp.py five
usage: emp.py [-h] square
emp.py: error: argument square: invalid int value: 'five'
<type 'exceptions.SystemExit'>
Run Code Online (Sandbox Code Playgroud)


Sim*_*ett 10

使用'raw_input'从控制台/终端输入.

如果你只是想要一个命令行参数,比如文件名或类似的东西

$ python my_prog.py file_name.txt
Run Code Online (Sandbox Code Playgroud)

那么你可以使用sys.argv ...

import sys
print sys.argv
Run Code Online (Sandbox Code Playgroud)

sys.argv是一个列表,其中0是程序名,因此在上面的例子中,sys.argv [1]将是"file_name.txt"

如果要使用完整的命令行选项,请使用optparse模块.

PEV


Mat*_*lan 9

如果您运行的是Python <2.7,则需要optparse,正如文档所解释的那样,它将创建一个接口,用于运行应用程序时调用的命令行参数.

但是,在Python≥2.7中,optparse已被弃用,并被替换为argparse,如上所示.来自文档的快速示例......

以下代码是一个Python程序,它获取整数列表并生成总和或最大值:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print args.accumulate(args.integers)
Run Code Online (Sandbox Code Playgroud)


Gre*_*att 6

截至Python 3.22.7,现在有argparse用于处理命令行参数.


Cor*_*ead 6

如果它是3.x版本,那么只需使用:

variantname = input()
Run Code Online (Sandbox Code Playgroud)

例如,您要输入8:

x = input()
8
Run Code Online (Sandbox Code Playgroud)

x将等于8但它将是一个字符串,除非你另外定义它.

所以你可以使用convert命令,如:

a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
Run Code Online (Sandbox Code Playgroud)