ฉันใช้หลามเพื่อสร้างการตั้งค่าโครงการของฉัน แต่ฉันต้องการความช่วยเหลือในการรับอาร์กิวเมนต์บรรทัดคำสั่ง
ฉันพยายามทำสิ่งนี้บนเทอร์มินัล:
$python myfile.py var1 var2 var3
ในไฟล์ Python ของฉันฉันต้องการใช้ตัวแปรทั้งหมดที่เป็นอินพุต
ฉันใช้หลามเพื่อสร้างการตั้งค่าโครงการของฉัน แต่ฉันต้องการความช่วยเหลือในการรับอาร์กิวเมนต์บรรทัดคำสั่ง
ฉันพยายามทำสิ่งนี้บนเทอร์มินัล:
$python myfile.py var1 var2 var3
ในไฟล์ Python ของฉันฉันต้องการใช้ตัวแปรทั้งหมดที่เป็นอินพุต
คำตอบ:
import sys
print(sys.argv)
โดยเฉพาะอย่างยิ่งถ้าคุณเรียกใช้python example.py one two three
:
>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']
import sys
sys.argv[1:]
จะให้รายการของการขัดแย้ง (ไม่รวมชื่อไฟล์หลาม)
[1:]
หมายถึง?
[1:]
ขึ้นไปเนื่องจากอาร์กิวเมนต์แรกsys.argv
คือโดยค่าเริ่มต้นแล้วชื่อของไฟล์ไพ ธ อนที่คุณกำลังเรียกใช้testrun.py
อยู่
ฉันขอแนะนำargparse
ซึ่งมาพร้อมกับ Python 2.7 และใหม่กว่า
argparse
โมดูลช่วยลดรหัสจานหม้อไอน้ำและทำให้รหัสของคุณมีประสิทธิภาพมากขึ้นเพราะโมดูลจัดการกรณีการใช้งานมาตรฐานทั้งหมด (รวมถึง subcommands) สร้างความช่วยเหลือและการใช้งานให้คุณตรวจสอบและ sanitize การป้อนข้อมูลของผู้ใช้ - สิ่งที่คุณต้องกังวลเกี่ยวกับเมื่อคุณ กำลังใช้sys.argv
วิธีการ และเป็นฟรี (ในตัว)
นี่เป็นตัวอย่างเล็ก ๆ :
import argparse
parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)
และผลลัพธ์สำหรับ python prog.py -h
usage: simple_example [-h] counter
positional arguments:
counter counter will be increased by 1 and printed.
optional arguments:
-h, --help show this help message and exit
และpython prog.py 1
อย่างที่คุณคาดหวัง:
2
parser.add_argument('var3', nargs='?', type=int, default=3)
var3 เป็นพารามิเตอร์เสริมถ้าคุณไม่ระบุค่าในบรรทัดคำสั่งคุณสามารถเข้าถึง var3 ในรหัสของคุณค่าเริ่มต้นสำหรับ var3 = 3
รหัสหลาม:
import sys
# main
param_1= sys.argv[1]
param_2= sys.argv[2]
param_3= sys.argv[3]
print 'Params=', param_1, param_2, param_3
ภาวนา:
$python myfile.py var1 var2 var3
เอาท์พุท:
Params= var1 var2 var3
คุณสามารถใช้sys.argv
เพื่อรับอาร์กิวเมนต์เป็นรายการ
หากคุณต้องการเข้าถึงองค์ประกอบแต่ละรายการคุณสามารถใช้
sys.argv[i]
โดยที่i
index 0
จะทำให้ชื่อไฟล์ไพ ธ อนของคุณถูกเรียกใช้งาน ดัชนีใด ๆ หลังจากนั้นจะมีการส่งผ่านอาร์กิวเมนต์
ถ้าคุณเรียกมันว่าสิ่งนี้: $ python myfile.py var1 var2 var3
import sys
var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]
คล้ายกับอาร์เรย์ที่คุณมีsys.argv[0]
ซึ่งเป็นไดเรกทอรีการทำงานปัจจุบันเสมอ
sys.argv[0]
ไม่ใช่ไดเรกทอรีการทำงานปัจจุบัน มันเป็นชื่อของไฟล์ที่กำลังดำเนินการ
บางสิ่งเพิ่มเติมที่ฉันคิดได้
ดังที่ @allsyed กล่าวว่า sys.argv ให้รายการของส่วนประกอบ (รวมถึงชื่อโปรแกรม) ดังนั้นหากคุณต้องการทราบจำนวนองค์ประกอบที่ส่งผ่านบรรทัดคำสั่งคุณสามารถใช้ len () เพื่อกำหนดได้ ตามนี้คุณสามารถออกแบบข้อความยกเว้น / ข้อผิดพลาดหากผู้ใช้ไม่ผ่านพารามิเตอร์จำนวนเฉพาะ
นอกจากนี้หากคุณกำลังมองหาวิธีที่ดีกว่าในการจัดการอาร์กิวเมนต์บรรทัดคำสั่งฉันขอแนะนำให้คุณดูที่https://docs.python.org/2/howto/argparse.html