Sunday, June 23, 2013

[TIL] Chạy command từ python script

và liên thiên về ruby, bash...

Trong python 2.7, có đến vài cách để chạy 1 câu lệnh linux. Điều này thực sự trái với triết lý của Python:
There should be one-- and preferably only one --obvious way to do it.
Các cách để chạy 1 command:
  • dùng lệnh os.system
  • dùng module subprocess
  • dùng module commands
  • dùng Popen
ai cũng hiểu rằng python có khả năng xử lý tốt hơn bash, nhưng hãy nhìn ví dụ đơn giản dưới đây khi cần lấy output của một câu lệnh:

bash:
ls_output=`ls -la | grep hvn`
hoặc
ls_output=$(ls -la | grep hvn)
 python2:

from commands import etstatusoutput
status, ls_output = getstatusoutput('ls -la | grep hvn')

hoặc:


from subprocess import check_output
ls_output = check_output('ls -la | grep hvn', shell=True)

Dễ thấy việc gọi các câu lênh từ python rất dài dòng so với bash.

Trong khi với ruby thì mọi chuyện lại đơn giản hơn nhiều (thực hiện trên ruby 2.0) :
 ls_output = `ls -la | grep hvn`

Ruby cho phép bạn thực hiện việc này giống hệt với bash.
Đồng thời ruby cho khả năng xử lý string tương đương với python.

Python hơn Ruby về tốc độ, về số lượng và chất lượng thư viện, nhưng trong trận đấu khi mà bạn cần một ngôn ngữ có khả năng xử lý mạnh hơn bash nhưng cú pháp gọi câu lệnh đơn giản như bash thì ruby là người chiến thắng.

Nếu đó CHÍNH XÁC là điều bạn cần, hãy chọn ruby :D

No comments: