Günlük

Python Execute Shell Commands Düzenle


22 Aralık 2014 21:55:45 tarihinde Mehmet Özgür Bayhan tarafından yazılmıştır.


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()


Yorum Yazın: