การสร้างมิตรภาพ Python และ Bash: การเปิดตัวไลบรารี python-shell และ smart-env v 1.0.1

สวัสดีทุกคน!

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

วันวางจำหน่ายครั้งต่อไปจะประกาศเพิ่มเติมในช่องทางการสื่อสารต่อไปนี้:

ที่มา: will.com

เพิ่มความคิดเห็น