it-swarm-vi.com

Đối số đầu vào và dòng lệnh của người dùng

Làm cách nào để tôi có tập lệnh Python mà a) có thể chấp nhận đầu vào của người dùng và làm cách nào để làm cho nó b) đọc trong các đối số nếu chạy từ dòng lệnh?

465
Teifion

Để đọc dữ liệu nhập của người dùng, bạn có thể thử mô đun cmd để dễ dàng tạo trình thông dịch dòng lệnh mini (với văn bản trợ giúp và tự động hoàn thành) và raw_input ( input cho Python 3+) để đọc dòng văn bản từ người dùng.

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

Đầu vào dòng lệnh nằm trong sys.argv. Hãy thử điều này trong kịch bản của bạn:

import sys
print (sys.argv)

Có hai mô-đun để phân tích các tùy chọn dòng lệnh:  optparse (không dùng nữa từ Python 2.7, sử dụng argparse thay vào đó) và getopt . Nếu bạn chỉ muốn nhập tệp vào tập lệnh của mình, hãy xem sức mạnh của fileinput .

Tham chiếu thư viện Python là bạn của bạn.

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

Hoặc cho Python 3:

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

raw_input không còn khả dụng trong Python 3.x. Nhưng raw_input đã được đổi tên thành input, do đó, chức năng tương tự tồn tại.

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

Tài liệu về sự thay đổi

201
steampowered

Cách tốt nhất để xử lý các đối số dòng lệnh là mô đun argparse.

Sử dụng raw_input() để nhận đầu vào của người dùng. Nếu bạn nhập readline module người dùng của bạn sẽ có lịch sử và chỉnh sửa dòng.

31
Dave Webb

Cẩn thận không sử dụng hàm input, trừ khi bạn biết bạn đang làm gì. Không giống như raw_input, input sẽ chấp nhận bất kỳ biểu thức python nào, vì vậy nó giống như eval

18
Vhaerun

Chương trình đơn giản này giúp bạn hiểu cách cung cấp đầu vào của người dùng từ dòng lệnh và để hiển thị trợ giúp về việc truyền đối số không hợp lệ.

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) Để tìm căn bậc hai của 5

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

2) Truyền đối số không hợp lệ ngoài số

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

Sử dụng 'raw_input' cho đầu vào từ bàn điều khiển/thiết bị đầu cuối.

nếu bạn chỉ muốn một đối số dòng lệnh như tên tệp hoặc một cái gì đó, ví dụ:.

$ python my_prog.py file_name.txt

sau đó bạn có thể sử dụng sys.argv ...

import sys
print sys.argv

sys.argv là danh sách trong đó 0 là tên chương trình, vì vậy trong ví dụ trên sys.argv [1] sẽ là "file_name.txt"

Nếu bạn muốn có đầy đủ các tùy chọn dòng lệnh, hãy sử dụng mô-đun optparse.

Pev

10
Simon Peverett

Nếu bạn đang chạy Python <2.7, bạn cần optparse , như tài liệu giải thích sẽ tạo giao diện cho các đối số dòng lệnh được gọi khi ứng dụng của bạn chạy.

Tuy nhiên, trong Python ≥2.7, optparse đã không được dùng nữa và được thay thế bằng argparse như được hiển thị ở trên. Một ví dụ nhanh từ các tài liệu ...

Đoạn mã sau là chương trình Python lấy danh sách các số nguyên và tạo tổng hoặc cực đại:

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)
9
Matt Olan

Nếu đó là phiên bản 3.x thì chỉ cần sử dụng:

variantname = input()

Ví dụ: bạn muốn nhập 8:

x = input()
8

x sẽ bằng 8 nhưng nó sẽ là một chuỗi trừ khi bạn định nghĩa nó khác.

Vì vậy, bạn có thể sử dụng lệnh convert, như:

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

Kể từ Python 3.2 2.7, hiện có argparse để xử lý các đối số dòng lệnh.

6
GreenMatt

Trong Python 2:

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

Trong Python 3:

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

if six.PY2:
    input = raw_input

print(input("What's your name? "))
1
Will Charlton