Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python- Best Way to Call functions based on the previous Function exit status?

In main() What is the best way to call a series of functions based on the condition of the previous function exit status? I could do

if function foo(x, ssh) == True:
       if function bar(x.info, ssh) == True:
           if function foobar(x.info, ssh)

But I rather do it a more efficient way like place the functions(with their parameters) in a immutable list and have them iterate in a loop while exit status is True. Or does python have some sugar syntax that is even better?

import pdb
import paramiko
import time
import sys
from collections import OrderedDict


class GetInfo():
    def __init__(self):
        self.info = OrderedDict([('count', None),
                     ('file_name_filename', ' '),
                     ('continute', ' '),
                     ('filename', None)])

        self.login_info = OrderedDict([('username', 'user'),
                                       ('hostname', '50.223.222.111'),
                           ('password', 'password')])

        epoch_birth = 15842
        epoch_birth = 15842
        count_start = 5555
        current_epoch = int(round(time.mktime(time.localtime())/86400))
        count = str((current_epoch - epoch_birth) + count_start)
        self.info["count"] = count

        fname = "/d2/file_name"+count
        self.info["filename"] = fname

    def login_name(self):
        name = raw_input("Enter Login Name: ")
        self.login_info["login_name"] = name
    def host_name(self): 
        name = raw_input("Enter Host Name: ")
        self.login_info["host_name"] = name
    def password(self):
        name = raw_input("Enter Password: ")
        self.login_info["password"] = name
    def fname(self):
        name = raw_input("Enter Filename and aboslute path: ")
        self.info["password"] = name

def login(object_dict):
        hostname = object_dict['hostname']
    username = object_dict['username']
    password = object_dict['password']
    port = 5777
    try: 
            ssh=paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect( hostname, port, username, password)
        return ssh
    except paramiko.AuthenticationException:
        print "Wrong username/password PUNK!"
        return False
    except: 
        print "Could not connect!"
        return False

def read_log(exit_status, stdin, stdout, stderr):
    if exit_status:
        output = stderr.readlines()
    else:
        output = stdout.readlines()
    return ''.join(output)

def get_file(object_dict, ssh):
    stdin, stdout, stderr=ssh.exec_command("bash -c 'ls -al $1' -- " + object_dict["filename"])
    for i in object_dict:
        stdin.write(object_dict[i]+"\n")
        stdin.flush()
    exit_status = stdout.channel.recv_exit_status()
    print exit_status 
    print read_log(exit_status, stdin, stdout, stderr)
    ssh.close()

def create(object_dict, ssh):
    stdin, stdout, stderr=ssh.exec_command("/home/one/file_nameslice.sh")
    for i in object_dict:
        stdin.write(object_dict[i]+"\n")
        stdin.flush()
    exit_status = stdout.channel.recv_exit_status()
    print read_log(exit_status, stdin, stdout, stderr)
    ssh.close()



def main():
    x = GetInfo()
    ssh = login(x.login_info)
    if ssh:
            get_file(x.info, ssh)

main()
like image 900
dman Avatar asked Aug 10 '26 07:08

dman


1 Answers

You could join these functions with and, for example:

def foo(arg):
    if arg > 2:
        print True, arg
        return True
    else:
        print False, arg
        return False

foo(4) and foo(3) and foo(2) and foo(1)

Only when previous function returns true, the next function would be called. So the output is:

True 4
True 3
False 2
like image 158
Roger Avatar answered Aug 11 '26 20:08

Roger



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!