Пользовательский ввод и аргументы командной строки
-
09-06-2019 - |
Вопрос
Как мне получить сценарий 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)
Существует два модуля для анализа параметров командной строки: (устарело, начиная с Python 2.7, используйте optparse
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? "))