Python Execute Shell Commands
Dec. 22, 2014, 9:55 p.m.
Renkli shell çıktıları için :
# -*- coding: utf-8 -*-
__author__ = 'ozgur'
__creation_date__ = '27.01.2013' '02:16'
__RED = '\033[91m'
__GREEN = '\033[92m'
__YELLOW = '\033[93m'
__BLUE = '\033[94m'
__PINK = '\033[95m'
__CYAN = '\033[96m'
__WHITE = '\033[97m'
__YELLOW = '\033[93m'
__ENDC = '\033[0m'
__DEFAULT = "\033[99m"
def printComment(text):
return __GREEN + text + __ENDC
def printMenu(text):
return __YELLOW + text + __ENDC
def printInfo(text):
return __PINK + text + __ENDC
Renklendirdiğimiz çıktıyı ekrana echo ettirdiğimizde bash'in kendi içine gömülü renklendirmesini kullanarak çıktıları ekrana yazdırabiliriz
Bir diğer konu ise.Python üzerinde komut satırı işletimi ve process yönetimi için subprocess adında harika bir kütüphane var. Kullanım örnekleri:
Çıktıyı bir değişkene atamak için :
import commands
output = commands.getstatusoutput('ls -alh')
Çıktıyı shell e yönlendirmek için :
command = "ls -alh"
subprocess.call([command],shell=True)
Eğer işlemimiz uzun sürüyorsa ve çıktıları anlık olarak adım adım takip edeceksek çıktıyı sterror a pieline olarak bağlamamız gerekiyor. Örneğin netstat için:
#!/usr/bin/python
import subprocess
## command to run - tcp only ##
cmd = "/usr/sbin/netstat -p tcp -f inet"
## run it ##
p = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE)
## But do not wait till netstat finish, start displaying output immediately ##
while True:
out = p.stderr.read(1)
if out == '' and p.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()