ฉันจะมีสคริปต์ Python ที่ a) สามารถรับอินพุตของผู้ใช้ได้อย่างไรและฉันจะสร้างมันได้อย่างไร b) อ่านเป็นอาร์กิวเมนต์หากเรียกใช้จากบรรทัดคำสั่ง
argparse
optparse
ฉันจะมีสคริปต์ Python ที่ a) สามารถรับอินพุตของผู้ใช้ได้อย่างไรและฉันจะสร้างมันได้อย่างไร b) อ่านเป็นอาร์กิวเมนต์หากเรียกใช้จากบรรทัดคำสั่ง
argparse
optparse
คำตอบ:
ในการอ่านอินพุตของผู้ใช้คุณสามารถลองใช้cmd
โมดูลเพื่อสร้างล่ามบรรทัดคำสั่ง mini (พร้อมข้อความช่วยเหลือและการเติมข้อความอัตโนมัติ) และ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
มันเป็นฟังก์ชั่นในตัว
raw_input
ไม่มีใน Python 3.x อีกต่อไป แต่raw_input
ถูกเปลี่ยนชื่อinput
ดังนั้นฟังก์ชั่นเดียวกันจึงมีอยู่
input_var = input("Enter something: ")
print ("you entered " + input_var)
import fileinput result=[] for line in fileinput.input(): result.append(line)
วิธีที่ดีที่สุดในการประมวลผลอาร์กิวเมนต์บรรทัดคำสั่งคือargparse
โมดูล
ใช้raw_input()
เพื่อรับอินพุตของผู้ใช้ หากคุณนำเข้าreadline module
ผู้ใช้ของคุณจะมีการแก้ไขและประวัติบรรทัด
ระวังอย่าใช้input
ฟังก์ชั่นนอกจากคุณจะรู้ว่าคุณกำลังทำอะไรอยู่ ซึ่งแตกต่างจากraw_input
, input
จะยอมรับการแสดงออกหลามใด ๆ ดังนั้นจึงเป็น kinda เช่น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] จะเป็น "file_name.txt"
หากคุณต้องการมีตัวเลือกบรรทัดคำสั่งแบบเต็มให้ใช้โมดูล optparse
PEV
หากคุณใช้งาน Python <2.7 คุณจำเป็นต้องเลือกใช้งานซึ่ง doc อธิบายจะสร้างส่วนต่อประสานไปยังอาร์กิวเมนต์บรรทัดคำสั่งที่เรียกใช้เมื่อแอปพลิเคชันของคุณทำงาน
อย่างไรก็ตามใน Python .72.7 opt opt ได้ถูกเลิกใช้แล้วและถูกแทนที่ด้วยอาร์กิวเมนต์ตามที่แสดงด้านบน ตัวอย่างรวดเร็วจากเอกสาร ...
รหัสต่อไปนี้เป็นโปรแกรม 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)
ในฐานะของหลาม 3.22.7 มีตอนนี้argparseสำหรับการประมวลผลอาร์กิวเมนต์บรรทัดคำสั่ง
หากเป็นรุ่น 3.x ให้ใช้:
variantname = input()
ตัวอย่างเช่นคุณต้องการป้อนข้อมูล 8:
x = input()
8
x จะเท่ากับ 8 แต่มันจะเป็นสตริงยกเว้นว่าคุณจะนิยามเป็นอย่างอื่น
ดังนั้นคุณสามารถใช้คำสั่ง convert เช่น:
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? "))