คำตอบของ Martijen นั้นสมเหตุสมผล แต่มันขาดบางอย่างที่สำคัญซึ่งอาจดูเหมือนชัดเจนสำหรับคนอื่น แต่ก็ยากสำหรับฉันที่จะคิดออก
ในเวอร์ชันที่คุณใช้ argparse คุณต้องมีบรรทัดนี้ในเนื้อหาหลัก
args = parser.parse_args(args)
โดยปกติเมื่อคุณใช้ argparse ในสคริปต์ที่คุณเพิ่งเขียน
args = parser.parse_args()
และ parse_args ค้นหาอาร์กิวเมนต์จากบรรทัดคำสั่ง แต่ในกรณีนี้ฟังก์ชันหลักไม่สามารถเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งได้ดังนั้นคุณต้องบอกอาร์กิวเมนต์ว่าอาร์กิวเมนต์คืออะไร
นี่คือตัวอย่าง
import argparse
import sys
def x(x_center, y_center):
print "X center:", x_center
print "Y center:", y_center
def main(args):
parser = argparse.ArgumentParser(description="Do something.")
parser.add_argument("-x", "--xcenter", type=float, default= 2, required=False)
parser.add_argument("-y", "--ycenter", type=float, default= 4, required=False)
args = parser.parse_args(args)
x(args.xcenter, args.ycenter)
if __name__ == '__main__':
main(sys.argv[1:])
สมมติว่าคุณตั้งชื่อ mytest.py นี้ในการเรียกใช้คุณสามารถทำสิ่งเหล่านี้ได้จากบรรทัดคำสั่ง
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
ซึ่งจะกลับมาตามลำดับ
X center: 8.0
Y center: 4
หรือ
X center: 8.0
Y center: 2.0
หรือ
X center: 2
Y center: 4
หรือถ้าคุณต้องการเรียกใช้จากสคริปต์ python อื่นคุณสามารถทำได้
import mytest
mytest.main(["-x","7","-y","6"])
ซึ่งส่งคืน
X center: 7.0
Y center: 6.0
myModule.main()
ได้ คุณได้ลองทำอะไรมาบ้าง?