เขียนโปรแกรมภาษา Python เพื่อเรียกใช้คำสั่ง Linux Command Line - mrolarik/simple-iot GitHub Wiki
- การเขียนโปรแกรมภาษา Python เพื่อเรียกใช้คำสั่ง Linux หรือ Linux Command Line จะต้อง
import
ไลบรารี่ชื่อsubprocess
ดังนี้
import subprocess
- จากนั้นจึงจะสามารถใช้คำสั่ง เช่น
call
หรือ 'Popen' เพื่อเรียกใช้คำสั่ง Linux ได้ เช่น
subprocess.Popen('ls')
ผลลัพธ์ที่ได้จากคำสั่ง แสดงดังนี้
>>> call_cpu.py cpu.sh cpu_usage.sh netpie_cpu_usage.py test.py
ผลลัพธ์ที่ได้คือแสดงรายชื่อไฟล์และโฟลเดอร์ทั้งหมด ซึ่งก็คือคำสั่ง ls
ใน Linux command
- หากต้องการเก็บผลลัพธ์ไว้ในตัวแปร จะต้องเพิ่มคำสั่งดังต่อไปนี้
import subprocess
output = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE)
output = output.stdout.read()
print output
ผลลัพธ์ที่ได้จะเปลี่ยนไปดังนี้
call_cpu.py
cpu.sh
cpu_usage.sh
netpie_cpu_usage.py
test.py
การแสดงผลจะขึ้นบรรทัดใหม่ นั่นแสดงว่าโปรแกรมได้เพิ่มสัญลักษณ์พิเศษ \n
ลงไป ดังนั้น หากต้องการเขียนโปรแกรมเพื่อจัดเก็บผลลัพธ์ไว้ใน list
สามารถทำได้โดย ใช้คำสั่งดังนี้
output = output.split("\n")
หากต้องการทราบจำนวนของสมาชิกสามารถใช้คำสั่ง len
เพื่อตรวจสอบ ดังนี้
len(output)
จากตัวอย่าง ผลลัพธ์ที่ได้คือ 6
เนื่องจากมีบรรทัดว่างจำนวน 1 บรรทัด ดังนั้นต้องลบ (Remove) บรรทัดว่างทิ้งไป ด้วยคำสั่ง
output = filter(None, output)
len(output)
print(output)
ผลลัพธ์ที่ได้
5
['call_cpu.py', 'cpu.sh', 'cpu_usage.sh', 'netpie_cpu_usage.py', 'test.py']
คำสั่ง filter
จะทำหน้าที่ลบสมาชิกของ list
ที่ว่าง และคำสั่ง print จะแสดงข้อมูลสมาชิกของ output
ดังนั้น ผลลัพธ์ที่ได้คือมีจำนวนสมาชิกเท่ากับ 5
ตัวอย่างโปรแกรมที่สมบูรณ์
#----------------command_ls.py-------------------
import subprocess
output = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE)
output = output.stdout.read()
output = output.split("\n")
output = filter(None, output)
print("Number of file(s) and folder(s): ", len(output))
print output
จากนั้นให้รันโปรแกรมด้วยคำสั่ง
$ python command_ls.py
ผลลัพธ์ที่ได้คือ
('Number of file(s) and folder(s): ', 5)
['call_cpu.py', 'cpu.sh', 'cpu_usage.sh', 'netpie_cpu_usage.py', 'test.py']
รายละเอียดเพิ่มเติม
https://docs.python.org/3.4/library/subprocess.html?highlight=subprocess