Пользовательский ввод и аргументы командной строки

StackOverflow https://stackoverflow.com/questions/70797

Вопрос

Как мне получить сценарий Python, который а) может принимать пользовательский ввод, и как мне это сделать б) читать аргументы, если он запускается из командной строки?

Это было полезно?

Решение

Чтобы прочитать ввод пользователя, вы можете попробовать тот cmd модуль для простого создания мини-интерпретатора командной строки (со справочными текстами и автодополнением) и raw_input (input для Python 3+) для чтения строки текста от пользователя.

text = raw_input("prompt")  # Python 2
text = input("prompt")  # Python 3

Вводы командной строки находятся в sys.argv.Попробуйте это в своем скрипте:

import sys
print (sys.argv)

Существует два модуля для анализа параметров командной строки: optparse (устарело, начиная с Python 2.7, используйте argparse вместо этого) и getopt.Если вы просто хотите ввести файлы в свой скрипт, оцените мощь fileinput.

А Справочник по библиотеке Python твой друг.

Другие советы

var = raw_input("Please enter something: ")
print "you entered", var

Или для Python 3:

var = input("Please enter something: ")
print("You entered: " + var)

raw_input больше не доступен в Python 3.x.Но raw_input был переименован input, поэтому существует та же функциональность.

input_var = input("Enter something: ")
print ("you entered " + input_var) 

Документация об изменении

Лучший способ обработки аргументов командной строки — это argparse модуль.

Использовать raw_input() чтобы получить пользовательский ввод.Если вы импортируете readline module ваши пользователи будут иметь возможность редактирования строк и истории.

Будьте осторожны, не используйте input функцию, если вы не знаете, что делаете.В отличие от raw_input, input примет любое выражение Python, так что это что-то вроде eval

Эта простая программа поможет вам понять, как вводить пользовательский ввод из командной строки, и покажет справку при передаче недопустимого аргумента.

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

1) Найти квадратный корень из 5

C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5

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'>

Используйте «raw_input» для ввода с консоли/терминала.

если вам просто нужен аргумент командной строки, например имя файла или что-то еще, например.

$ python my_prog.py file_name.txt

тогда вы можете использовать sys.argv...

import sys
print sys.argv

sys.argv — это список, где 0 — это имя программы, поэтому в приведенном выше примере sys.argv[1] будет «имя_файла.txt».

Если вы хотите иметь полные параметры командной строки, используйте модуль optparse.

Пев

Если вы используете 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)

Начиная с Python 3.2 2.7, сейчас есть argparse для обработки аргументов командной строки.

Если это версия 3.x, просто используйте:

variantname = input()

Например, вы хотите ввести 8:

x = input()
8

x будет равен 8, но это будет строка, если только вы не определите ее иначе.

Итак, вы можете использовать команду преобразования, например:

a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07

В Python 2:

data = raw_input('Enter something: ')
print data

В Python 3:

data = input('Enter something: ')
print(data)
import six

if six.PY2:
    input = raw_input

print(input("What's your name? "))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top