Аргументи користувача та аргументи командного рядка [закрито]


525

Як у мене є сценарій Python, який а) може приймати введення користувача та як це зробити, щоб він міг читати в аргументах, якщо запускати з командного рядка?


9
Відповідь буде залежати від вашої версії Python. Python 3.x робить це дещо інакше, ніж Python 2.7
парі

4
І Python 2.7 також робить це трохи інакше, ніж версії до 2.7, наприклад argparseзамість optparse.
HelloGoodbye

Відповіді:


501

Для читання призначеного для користувача введення , ви можете спробувати на 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 є вашим другом.


71
raw_inputбуло перейменовано inputв Python 3.x - тут документація
подано папку

1
Моє улюблене джерело для цього: tutorialspoint.com/python/python_command_line_arguments.htm, і це теж добре виглядає: cyberciti.biz/faq/python-command-line-arguments-argv-example
Jordan Stewart

1
sys.argv потрібно надати номер аргументу, якщо припустимо, що ви передаєте параметр як значення, наприклад. python file_name.py 2017-02-10, і ви хочете використовувати дату, вона повинна бути sys.argv [1], інакше це буде такий список, як [file_name.py, 2017-02-10]
Aravind Krishnakumar

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

Або для Python 3:

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

26
Слід зазначити, що вам не потрібно імпортувати raw_input, це вбудована функція.
Денніс Голомазов

7
Вам не доведеться використовувати str () в конкатенації друку, оскільки всі введені дані будуть типом str (ing) за замовчуванням (парні числа).
Гуджон

202

raw_inputбільше не доступний в Python 3.x. Але raw_inputбуло перейменовано input, тому існує та сама функціональність.

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

Документування зміни


24
У Python 2.7 введення () не перетворює значення в рядки. Отже, якщо ви спробуєте зробити це: input_variable1 = input ("Введіть перше слово або фразу:"), ви отримаєте помилку: Traceback (останній виклик останній): return eval (raw_input (prompt)) Файл "<string> ", рядок 1, в <module> NameError: ім'я 'погано' не визначено
ІгорГанапольський

input_var = input ("Натисніть" E "та" Enter "для виходу:") NameError: ім'я "e" не визначено. Я використовую Python 2.5. Як, я можу подолати цю помилку.
Діпак Дубей

Ви можете уникнути повідомлення Traceback, скориставшись наступним імпортом, який постачається з Python 2.7:import fileinput result=[] for line in fileinput.input(): result.append(line)
Stefan Gruenwald

Ось більше історії та обгрунтування: python.org/dev/peps/pep-3111
Julian

33

Найкращим способом обробки аргументів командного рядка є argparseмодуль.

Використовуйте raw_input()для отримання вводу користувача. Якщо ви імпортуєте, readline moduleваші користувачі матимуть редагування рядків та історію.


readline доступна лише для Unix поза коробкою.
дементований їжак

5
argparse - новий optparse
Niels Bom

18

Обережно не використовувати цю inputфункцію, якщо ви не знаєте, що робите. На відміну від цього raw_input, inputприймуть будь-який вираз python, тому це начебто якeval


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

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

10

Використовуйте '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.

Пев


9

Якщо ви працюєте з Python <2.7, вам потрібен optparse , який, як пояснює документ, створить інтерфейс до аргументів командного рядка, які викликаються при запуску програми.

Однак у Python ≥2.7 optparse був застарілим і замінений на аргпарсер, як показано вище. Швидкий приклад із документів ...

Наступний код - це програма 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)


6

Якщо це версія 3.x, тоді просто використовуйте:

variantname = input()

Наприклад, ви хочете ввести 8:

x = input()
8

x дорівнюватиме 8, але це буде рядок, за винятком випадків, коли ви визначаєте його інакше.

Таким чином, ви можете використовувати команду convert, наприклад:

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.