Làm cách nào để có tập lệnh Python có thể chấp nhận đầu vào của người dùng (giả sử điều này là có thể) và làm cách nào để đọc trong đối số nếu chạy từ dòng lệnh?Python: đầu vào của người dùng và đối số dòng lệnh
Trả lời
Để đọc đầu vào người dùng mà bạn có thể thử the cmd
module để dễ dàng tạo ra một dòng thông dịch viên mini-lệnh (với văn bản trợ giúp và autocompletion) và raw_input
(input
cho Python 3+) để đọc một 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 cho phân tích tùy chọn dòng lệnh: (bị phản đối từ Python 2.7, sử dụng optparse
argparse
thay) 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
.
Python library reference là bạn của bạn.
'raw_input' được đổi tên thành' input' trong Python 3.x - [tài liệu ở đây] (http://docs.python.org/py3k/whatsnew/3.0.html#builtins) – steampowered
Yêu thích của tôi nguồn cho điều này: http://www.tutorialspoint.com/python/python_command_line_arguments.htm và điều này cũng tốt: http://www.cyberciti.biz/faq/python-command-line-arguments-argv-example/ –
sys.argv cần được cung cấp với số đối số, nếu giả sử bạn chuyển một tham số dưới dạng giá trị ví dụ. python file_name.py 2017-02-10 và bạn muốn sử dụng ngày, nó phải là sys.argv [1] nếu không nó sẽ là một danh sách như [file_name.py, 2017-02-10] –
var = raw_input("Please enter something: ")
print "you entered", var
Hoặc cho Python 3:
var = input("Please enter something: ")
print("You entered " + str(var))
Cần lưu ý rằng bạn không phải nhập 'raw_input', đó là hàm dựng sẵn. –
Bạn không phải sử dụng str() trong kết nối in vì tất cả các dữ liệu đã nhập sẽ là loại str (ing) theo mặc định (thậm chí là số). – Goujon
Cách tốt nhất để xử lý đối số dòng lệnh là argparse
module.
Sử dụng raw_input()
để có được đầu vào người dùng. Nếu bạn nhập readline module
, người dùng của bạn sẽ có chỉnh sửa và lịch sử dòng.
readline chỉ có sẵn trên unix ra khỏi hộp mặc dù. –
argparse là optparse mới –
Sử dụng 'raw_input' cho đầu vào từ bảng đ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 ví dụ, 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à một 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
cẩn thận không sử dụng input
chức năng, trừ khi bạn biết những gì bạn đang làm. Không giống như raw_input
, input
sẽ chấp nhận bất kỳ biểu hiện trăn, do đó, nó kinda như eval
Tính đến Python 3.2 2.7, hiện nay argparse là để xử lý đối số dòng lệnh.
argparse cũng đã được backported và có sẵn trên PyPi http://pypi.python.org/pypi/argparse/1.2.1 –
raw_input
không còn có sẵn bằng Python 3.x. Nhưng raw_input
đã được đổi tên thành input
, vì vậy chức năng tương tự tồn tại.
input_var = input("Enter something: ")
print ("you entered " + input_var)
Trong Python 2.7, đầu vào() không chuyển đổi giá trị thành chuỗi. Vì vậy, nếu bạn cố gắng thực hiện điều này: input_variable1 = input ("Nhập từ hoặc cụm từ đầu tiên:"), bạn sẽ gặp lỗi: Traceback (cuộc gọi gần đây nhất): return eval (raw_input (prompt)) Tệp "
input_var = input ("Nhấn 'E' và 'Enter' để thoát:") NameError: name 'e' không được định nghĩa I đang sử dụng Python 2.5. Làm thế nào, tôi có thể khắc phục lỗi này. –
Bạn có thể tránh được thông báo Traceback bằng cách sử dụng việc nhập khẩu sau đó đi kèm với Python 2.7: 'nhập khẩu fileinput result = [] cho dòng trong fileinput.input(): \t result.append (dòng) ' –
Nếu bạn đang chạy Python < 2.7, bạn cần optparse, mà như doc giải thích sẽ tạo ra một giao diện để các đối số dòng lệnh được gọi khi ứng dụng của bạn được chạy.
Tuy nhiên, trong Python ≥2.7, optparse đã không được chấp nhận và được thay thế bằng argparse như được hiển thị ở trên. Một ví dụ nhanh chóng từ các tài liệu ...
The following code is a Python program that takes a list of integers and produces either the sum or the max:
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)
chương trình đơn giản này sẽ giúp bạn trong việc tìm hiểu làm thế nào để nuôi đầu vào người dùng từ dòng lệnh và hiển thị giúp đỡ về truyền tham 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) Đi qua lập luận hợp lệ khác hơn con 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'>
Nếu đó là một phiên bản 3.x sau đó chỉ đơn giản là sử dụng:
variantname = input()
Ví dụ: yo u muốn nhập 8:
x = input()
8
x sẽ bằng 8 nhưng sẽ là chuỗi trừ khi bạn xác định khác.
Vì vậy, bạn có thể sử dụng lệnh chuyển đổi, như:
a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
Trong Python 2:
data = raw_input('Enter something: ')
print data
Trong Python 3:
data = input('Enter something: ')
print(data)
Câu trả lời sẽ phụ thuộc vào phiên bản của Python. Python 3.x thực hiện điều này hơi khác một chút so với Python 2.7 – steampowered
Và Python 2.7 cũng thực hiện điều này khác một chút so với các phiên bản trước 2.7, ví dụ: 'argparse' thay vì' optparse'. – HelloGoodbye