อ็อพชัน –m ของอ็อพชันบรรทัดคำสั่งจะค้นหาโมดูลที่กำหนดและดำเนินการเป็นโมดูล __main__ กลไกนี้ได้รับการสนับสนุนภายในโดยโมดูล runpy จากโมดูลมาตรฐานของ Python ที่อนุญาตให้ระบุตำแหน่งสคริปต์โดยใช้เนมสเปซของโมดูล Python แทนที่จะเป็นระบบไฟล์
โมดูลนี้กำหนดสองฟังก์ชัน
run_module()
ฟังก์ชันนี้รันโค้ดของโมดูลที่ระบุและส่งคืนพจนานุกรมโมดูล globals ที่เป็นผลลัพธ์
อาร์กิวเมนต์ mod_name ควรเป็นชื่อโมดูลแบบสัมบูรณ์ หากชื่อโมดูลอ้างอิงถึงแพ็คเกจแทนที่จะเป็นโมดูลปกติ แพ็คเกจนั้นจะถูกนำเข้าและโมดูลย่อย __main__ ภายในแพ็คเกจนั้นจะถูกดำเนินการและจะส่งคืนพจนานุกรม globals ของโมดูลที่เป็นผลลัพธ์
ตัวแปรส่วนกลางพิเศษ __name__, __spec__, __file__, __cached__, __loader__ และ __package__ ถูกตั้งค่าในพจนานุกรม globals ก่อนดำเนินการโค้ดโมดูล
__name__ ถูกตั้งค่าเป็น mod_name + '.__main__' หากโมดูลที่มีชื่อเป็นแพ็คเกจ มิฉะนั้นเป็นอาร์กิวเมนต์ mod_name
__file__, __cached__, __loader__ และ __package__ ได้รับการตั้งค่าตามปกติตามข้อมูลจำเพาะของโมดูล
run_path()
ฟังก์ชันนี้รันโค้ดในไฟล์ตามเส้นทางที่กำหนดและส่งคืนพจนานุกรมโมดูล globals ที่เป็นผลลัพธ์ พาธที่ให้มาอาจอ้างถึงไฟล์ต้นทางของ Python ไฟล์ bytecode ที่คอมไพล์แล้ว หรือรายการ sys.path ที่ถูกต้องซึ่งมีโมดูล __main__ (เช่น zipfile ที่มีไฟล์ __main__.py ระดับบนสุด)
ตัวแปรส่วนกลางพิเศษ __name__, __spec__, __file__, __cached__, __loader__ และ __package__ ถูกตั้งค่าในพจนานุกรม globals ก่อนดำเนินการโค้ดโมดูล
__name__ ถูกตั้งค่าเป็น run_name หากอาร์กิวเมนต์ที่เป็นตัวเลือกนี้ไม่ใช่ None และเปลี่ยนเป็น '
ตัวอย่าง
บันทึกสคริปต์ต่อไปนี้เป็น runpyeample.py
#runpy exampledef add(x,y):return x+ydef main():x,y =10,20 พิมพ์ (เพิ่ม (x,y)) returnif __name__=='__main__':main()ก่อน>กระบวนการปกติของการดำเนินการตามตัวอย่างข้างต้นมีดังนี้
>>> นำเข้า runpyexample เป็น rp> >> rp.main()30>>>อย่างไรก็ตาม ตอนนี้เราใช้โมดูล runpy เพื่อดำเนินการโดยไม่ต้องนำเข้าจริงๆ
>>> นำเข้า runpy>>> runpy.run_module('runpyexample', run_name='__main__')30คุณยังสามารถใช้ฟังก์ชัน run_path() ได้
>>> runpy.run_path('runpyexample.py', run_name='__main__')30ดังที่กล่าวไว้ก่อนหน้านี้ runpy รองรับสวิตช์ –m ของบรรทัดคำสั่ง Python
E:\python37>python -m runpyexample30