Ввод данных пользователем и аргументы командной строки [закрыто]
Описание проблемы
Я столкнулся с проблемой при попытке создать Python-скрипт, который должен принимать ввод от пользователя. Мне нужно, чтобы скрипт мог как запрашивать данные у пользователя во время выполнения, так и обрабатывать аргументы, если он запускается из командной строки.
Вот что я пробовал:
- Использовал функцию
input()
для получения ввода от пользователя. - Искал информацию о библиотеке
argparse
, чтобы обрабатывать аргументы командной строки.
Однако мне не совсем понятно, как правильно организовать код так, чтобы он мог одновременно обрабатывать и ввод от пользователя, и параметры командной строки.
Есть ли лучшие практики или примеры, которые могли бы помочь мне решить эту задачу? Буду благодарен за любые советы!
5 ответ(ов)
Вот как можно перевести указанные вами фрагменты кода на русский язык, сохраняя стиль ответа на StackOverflow:
Для Python 2:
var = raw_input("Пожалуйста, введите что-нибудь: ")
print "Вы ввели:", var
А для Python 3:
var = input("Пожалуйста, введите что-нибудь: ")
print("Вы ввели: " + var)
В данном случае, функция raw_input
в Python 2 используется для получения пользовательского ввода, тогда как в Python 3 используется просто input
. Вывод также адаптирован для русского языка.
Данная простая программа помогает вам понять, как обрабатывать ввод пользователя из командной строки и как отображать справку при передаче неверного аргумента.
import argparse
import sys
try:
parser = argparse.ArgumentParser()
parser.add_argument("square", help="вывести квадрат данного числа",
type=int)
args = parser.parse_args()
# Выводим квадрат пользовательского ввода из командной строки.
print(args.square**2)
# Выводим все аргументы системы, переданные из командной строки, включая имя программы.
print(sys.argv)
# Выводим второй аргумент, переданный из командной строки; обращение начинается с НУЛЯ
print(sys.argv[1])
except:
e = sys.exc_info()[0]
print(e)
- Для нахождения квадрата числа 5:
C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
- Передача неверного аргумента, отличного от числа:
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'>
В первом случае программа успешно вычисляет квадрат числа 5 и выводит его, а также отображает переданные аргументы. Во втором случае, когда введено слово "five", программа сообщает об ошибке, так как ожидает целое число.
Будьте осторожны с использованием функции input
, если вы не уверены в своих действиях. В отличие от raw_input
, функция input
принимает любое выражение на Python, так что это фактически похоже на eval
.
Для ввода данных из консоли или терминала используйте raw_input
.
Если вам нужно передать аргумент командной строки, например имя файла, вы можете сделать это следующим образом:
$ python my_prog.py file_name.txt
В этом случае вам понадобится использовать sys.argv
...
import sys
print(sys.argv)
sys.argv
— это список, где индекс 0 содержит имя программы. Таким образом, в приведенном примере sys.argv[1]
будет равно "file_name.txt".
Если вам нужны полноценные параметры командной строки, рассмотрите возможность использования модуля optparse
.
Если у вас версия Python 3.x, просто используйте:
variantname = input()
Например, если вы хотите ввести 8:
x = input()
8
Переменная x
будет равна '8', но это будет строка, если вы не определите ее иначе.
Поэтому вы можете воспользоваться командой преобразования, например:
a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
Таким образом, a
будет равно 9.07.
Парсинг булевых значений с помощью argparse
"Как использовать необязательные позиционные аргументы в Argparse?"
Как получить доступ к аргументам командной строки?
Преобразование списка словарей в DataFrame pandas
Как отменить последнюю миграцию?