【麒麟实训-4】撷英3 – Python执行Linux命令公共方法

Linux下使用Python执行命令。

废话不说上代码,自己看。

这些公共方法可以直接用于执行sudo指令、验证用户密码、以及执行普通命令

def sudo_verify(password:str):
    """
    在使用sudo命令之前最好调用一次该程序验证sudo密码的正确性。
    :param password: 需要验证的密码
    :return: 布尔类型 表示通过与否,字符串类型表示返回信息。(密码正确时返回空串)
    """
    test_str = 'sudo test'

    echo = subprocess.Popen(['echo', password], stdout=subprocess.PIPE, )

    sudo = subprocess.Popen(['sudo', '-S', 'echo', test_str],
                            stdin=echo.stdout,
                            stdout=subprocess.PIPE,
                            # stderr=subprocess.PIPE
                            )

    return_str = sudo.stdout.read().decode().replace("\n","")
    if return_str == test_str:
        return True,""
    else:
        return False,return_str.replace("\n","")


def sudo_do_something(password:str,command:list):
    """
    调用此方法以执行需要加sudo的命令。
    :param password: 密码
    :param command: 列表,如:['./run.sh', test_type, debpkg]
    :return:
    """
    is_pass,rtstring=sudo_verify(password)
    if is_pass:
        echo = subprocess.Popen(['echo', password], stdout=subprocess.PIPE, )
        sudo = subprocess.Popen(['sudo', '-S'] + command,
                                stdin=echo.stdout,
                                stdout=subprocess.PIPE,
                                # stderr=subprocess.PIPE
                                )

        rtstring = sudo.stdout.read().decode()
    return is_pass,rtstring

def command(command):
    p = subprocess.Popen(command,
                            # stdin=echo.stdout,
                            stdout=subprocess.PIPE,
                            # stderr=subprocess.PIPE
                            )

    rtstring = p.stdout.read().decode()
    return rtstring
0 0 投票数
文章评分
订阅评论
提醒

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x