การรันคำสั่ง Shell

ฟังก์ชันนี้ช่วยให้คุณสามารถรันคำสั่ง Shell หรือสคริปต์ Shell ทั้งหมดบนอุปกรณ์ได้ คำสั่งทั้งหมดจะถูกรันด้วยสิทธิ์ root และเพื่อรองรับสคริปต์ที่ทำงานเป็นเวลานาน ฟังก์ชันนี้ยังรองรับการรันสคริปต์ในเบื้องหลังโดยไม่ปิดตัวเอง

การรันคำสั่งเบื้องหน้า (Foreground)

คุณสามารถใช้งานดังตัวอย่างด้านล่างเพื่อรันคำสั่งหรือสคริปต์ได้อย่างรวดเร็ว การดำเนินการนี้จะบล็อกโปรเซสปัจจุบัน ดังนั้นสคริปต์หรือคำสั่งของคุณไม่ควรใช้เวลารันนานเกินไป เหมาะสำหรับสคริปต์ที่ใช้เวลาสั้นๆ (ภายใน 0-10 วินาที)

cmd = d.execute_script("whoami")
>>> d.execute_script("notexist")
exitstatus: 127
stderr: "mksh: <stdin>[2]: notexist: inaccessible or not found\n"

ผลลัพธ์จะคืนค่า status code, standard output และ standard error

print (cmd.stdout)
print (cmd.stderr)
print (cmd.exitstatus)
>>> result = d.execute_script("id")
>>> print (result.stdout)
b'uid=0(root) gid=0(root)\n'
>>> print (result.stderr)
b''
>>> print (result.exitstatus)
0

การรันคำสั่งเบื้องหลัง (Background)

การรันคำสั่งเบื้องหลังใช้สำหรับสคริปต์ที่ทำงานเป็นเวลานาน เนื่องจากอาจมีความเป็นไปได้ที่ผู้ใช้จะเขียนลูปไม่สิ้นสุด (infinite loop) หรือสคริปต์มีการแสดงผลไม่จำกัด ซึ่งอาจทำให้หน่วยความจำเต็ม และไม่สามารถรับผลลัพธ์ของสคริปต์เบื้องหลังได้ หากคุณต้องการรับข้อมูลเอาต์พุตของสคริปต์ โปรดเขียนไฟล์เอาต์พุตด้วยตัวเองภายในสคริปต์

การเรียกใช้ด้านล่างจะรันสคริปต์ที่ใช้เวลานาน sleep และคืนค่าสตริง sid ซึ่งเป็น ID ของสคริปต์เบื้องหลังนี้

script = "sleep 100; exit 0;"
sid = d.execute_background_script(script)

หากสคริปต์เกิดสถานการณ์ที่ไม่คาดคิด คุณสามารถใช้การเรียกใช้ด้านล่างเพื่อบังคับจบการทำงานของสคริปต์ที่กำลังรันในเบื้องหลังได้

d.kill_background_script(sid)

คุณสามารถตรวจสอบว่าสคริปต์เบื้องหลังทำงานเสร็จสิ้นแล้วหรือไม่ผ่าน sid โดยใช้การเรียกใช้ด้านล่าง

d.is_background_script_finished(sid)
>>> script = "sleep 100; exit 0;"
>>> sid = d.execute_background_script(script)
>>> print (sid)
ba06da93-c3aa-4457-b90e-247e42a16207
>>> d.is_background_script_finished(sid)
False
>>> d.kill_background_script(sid)
True
>>> d.is_background_script_finished(sid)
True