13 สิงหาคม 2558

Published สิงหาคม 13, 2558 by with 0 comment

รันคำสั่งภายนอกแล้วส่งค่ากลับมายังไพทอนง่าย ๆ ด้วยโมดูล envoy

ในการเขียนคำสั่งให้ภาษาไพทอนทำการรันคำสั่งภายนอกแล้วส่งค่ากลับมายังภาษาไพทอน เรามักจะนึกถึงไลบรารี subprocess ซึ่งเป็นไลบรารีมาตรฐานของภาษาไพทอน แต่มีการใช้งานที่ค่อนข้างยุ่งยากสำหรับการใช้งานรันโปรแกรมหรือคำสั่งและดึงค่าที่ได้กลับเข้ามายังโปรแกรมไพทอนของเรา

ผมขอแนะนำโมดูล envoy เป็นโมดูลที่ช่วยให้รันคำสั่งภายนอกแล้วส่งค่ากลับมายังไพทอนได้อย่างง่าย ๆ โดยโมดูล envoy นี้จะทำการแปลคำสั่งไปเป็นคำสั่งของไลบรารี subprocess อีกที
ใช้ License: MIT
รองรับทั้ง Python 2 และ Python 3

สามารถติดตั้งได้โดยใช้คำสั่ง pip:
pip install envoy

การใช้งาน
ให้ import โมดูลเข้ามา

[python]import envoy[/python]

ตัวอย่างการใช้งาน
เนื่องจากโมดูลนี้ไม่มีเอกสารการใช้งานแบบซับซ้อนเหมือนโมดูลตัว ๆ อื่น ทางผู้พัฒนาโมดูล envoy จึงได้ยกตัวอย่างการใช้งานมาครับ

รันคำสั่งภายนอกแล้วส่งค่ากลับมายังไพทอนง่าย ๆ ด้วยโมดูล envoy

[python]
>>> r = envoy.run('git config', data='data to pipe in', timeout=2) # คำสั่ง ข้อมูล และเวลารอ
>>> r.status_code
129
>>> r.std_out # ดึงค่าที่แสดงผลออกมาทางคอมมานด์ไลน์
'usage: git config [options]'
>>> r.std_err # หากมีข้อผิดพลาด
''
[/python]

อีกตัวอย่าง

[python]
>>> r = envoy.run('uptime | pbcopy')

>>> r.command
'pbcopy'
>>> r.status_code
0

>>> r.history
[<Response 'uptime'>]
[/python]

เมื่อนำมาใช้งานจริง

[python]
>>> import envoy
>>> r = envoy.run('ping wannaphong.com')
>>> print(r.std_out)

Pinging wannaphong.com [104.24.97.245] with 32 bytes of data:
Reply from 104.24.97.245: bytes=32 time=493ms TTL=55
Reply from 104.24.97.245: bytes=32 time=390ms TTL=55
Reply from 104.24.97.245: bytes=32 time=104ms TTL=55
Reply from 104.24.97.245: bytes=32 time=99ms TTL=55

Ping statistics for 104.24.97.245:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 99ms, Maximum = 493ms, Average = 271ms

>>> r.command
['ping', 'wannaphong.com']
>>> r.status_code
0
[/python]

หน้าเว็บโมดูล envoy https://github.com/kennethreitz/envoy

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)