สวัสดีทุกคน!
29 กุมภาพันธ์ 2020 ปี มีการเปิดตัวห้องสมุดขนาดเล็กอย่างเป็นทางการ สมาร์ท-env и หลามเปลือก. สำหรับคนที่ไม่รู้ แนะนำให้อ่านก่อนนะครับ
กล่าวโดยสรุป การเปลี่ยนแปลงประกอบด้วยการดำเนินการคำสั่งให้เสร็จสิ้น ความสามารถที่เพิ่มขึ้นสำหรับการรันคำสั่ง การปรับโครงสร้างใหม่และการแก้ไขข้อบกพร่อง
มีอะไรใหม่ใน python-shell?
ฉันจะเริ่มด้วยของหวานทันที
คำสั่งเสร็จสิ้น
เห็นด้วย - จะสะดวกไหมเมื่อตัวแก้ไข/IDE/เทอร์มินัลแจ้งให้คุณระบุชื่อคำสั่ง และบางครั้งก็มีพารามิเตอร์การโทรด้วย ดังนั้น python-shell จึงค่อยๆ มีความคืบหน้าในการมอบฟังก์ชันการทำงานที่คล้ายกัน เนื่องจากข้อเท็จจริงที่ว่าฟิลด์ของคลาส Shell ภายใต้ประทุนนั้นเป็นฟิลด์โดยพฤตินัย ไม่ใช่ฟิลด์ของมัน (__getattr__ ที่แพร่หลาย) การเติมข้อความอัตโนมัติก็ถูกสร้างขึ้นตั้งแต่ต้นเช่นกัน (โดยการโอเวอร์โหลดเมธอด __dir__ ตามลำดับ) ปัจจุบันการเติมข้อความอัตโนมัติทำงานในสภาพแวดล้อม BPython และ IPython แน่นอนว่าฉันต้องการเห็นการบูรณาการกับผลิตภัณฑ์ที่มีชื่อเสียงเช่น PyCharm และความเป็นไปได้ในการนำไปใช้งานกำลังได้รับการศึกษาในทิศทางนี้
การเพิ่มคุณสมบัติ
ในส่วนหนึ่งของการเปิดตัว คลาส Shell ได้รับคุณสมบัติ Last_command ใหม่ ความจำเป็นเกิดขึ้นเนื่องจากเมื่อ ShellException ถูกส่งออกไปโดยคำสั่งที่มีโค้ดส่งคืนที่ไม่เป็นศูนย์ วัตถุ Command จะไม่ถูกส่งคืนจากการเรียก __call__() ไปยังวัตถุคำสั่ง ตอนนี้มีโอกาสที่จะทำสิ่งนี้:
try:
command = Shell.touch('/foo.txt')
except ShellException:
command = Shell.last_command
รายการคุณสมบัติของวัตถุ Command ก็ขยายออกไปเช่นกัน เพิ่มฟิลด์ข้อผิดพลาดที่ส่งคืนเอาต์พุตคำสั่งไปยังสตรีมข้อผิดพลาด
การรันคำสั่งด้วยชื่อ Python ที่ไม่ถูกต้อง
เกือบทุกระบบมีโปรแกรมอย่างน้อยหนึ่งโปรแกรมที่มีชื่อไม่เหมาะที่จะใช้เป็นตัวระบุใน Python (เช่น ยูทิลิตี 2to3 ที่รู้จักกันดี) โทรหาเธอด้วย
Shell.2to3()
หากไม่ได้ผล ล่ามจะไม่ปล่อยให้ผ่านไป
วิธีแก้ไขคือการเรียกคำสั่งในลักษณะวงเวียน:
Shell("2to3") # возвращает объект команды
เป็นที่น่าสังเกตว่าในลักษณะเดียวกับที่คุณสามารถเรียกใช้คำสั่งที่ถูกต้องจากมุมมองของล่ามซึ่งทำให้โอกาสในการสร้างสคริปต์ที่ยืดหยุ่นเช่น
cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)
การเปลี่ยนแปลงเล็กน้อย
- เมธอด __repr__() และ __str__() ของอ็อบเจ็กต์คลาส Command ได้ถูกนำมาใช้แล้ว ซึ่งตอนนี้สร้างค่าที่ใช้งานง่าย (คำสั่งที่มีพารามิเตอร์และเอาต์พุต stdout ตามลำดับ)
- การแก้ไขโค้ดเล็กน้อย
- เพิ่มความครอบคลุมของการทดสอบ ตลอดจนจัดระเบียบการทดสอบที่มีอยู่ใหม่
- การเพิ่มคลาส Subprocess และ Process โดยมีจุดประสงค์เพื่อสร้างระดับนามธรรมเพิ่มเติมเมื่อทำงานกับโมดูลกระบวนการย่อย จำเป็นอย่างยิ่งสำหรับการกำจัดความซ้ำซ้อนของโค้ดเมื่อทำงานกับ Python 2/3 แต่อาจให้โบนัสอื่นๆ ได้เช่นกัน
มีอะไรใหม่ใน smart-env?
ต่างจาก python-shell ตรงที่มีการเปลี่ยนแปลงน้อยกว่าในไลบรารี smart-env เหตุผลนี้ง่ายมาก - ไม่มีเวลาว่าง ในระหว่างนี้การปรับปรุงที่อาจเกิดขึ้นบางอย่าง (เช่น การเติมตัวแปรสภาพแวดล้อมอัตโนมัติ) ได้ถูกย้ายไปยังรุ่นถัดไป
อันที่จริง มีการเปลี่ยนแปลงต่อไปนี้กับห้องสมุด:
- การแก้ไขโค้ดเล็กน้อย
- การปรับโครงสร้างใหม่
- การจัดโครงสร้างใหม่และการปรับแต่งการทดสอบที่มีอยู่
แผนสำหรับการเปิดตัวครั้งต่อไป
ไลบรารีหลามเชลล์
- การเพิ่มการสนับสนุนสำหรับการเรียกคำสั่งที่ไม่ปิดกั้น (การดำเนินการแบบขนาน)
ไลบรารี่ smart-env
- การใช้งานการเติมข้อความอัตโนมัติของตัวแปรสภาพแวดล้อมในคลาส ENV
- รองรับตัวดำเนินการ in เพื่อตรวจสอบการมีอยู่ของตัวแปร env
- การดำเนินการสนับสนุนฟังก์ชัน str() และ repr() สำหรับคลาส ENV
วันวางจำหน่ายครั้งต่อไปจะประกาศเพิ่มเติมในช่องทางการสื่อสารต่อไปนี้:
ช่องโทรเลข (สาธารณะ) Twitter - อัปเดตในบทความนี้
ที่มา: will.com