需要借助exe_command函数,该函数通过subprocess执行 shell 命令,并实时打印输出。
from subprocess import Popen, PIPE, STDOUT def exe_command(command): """ 执行 shell 命令并实时打印输出 :param command: shell 命令 :return: process, exitcode """ print(command) process = Popen(command, stdout=PIPE, stderr=STDOUT, shell=True) with process.stdout: for line in iter(process.stdout.readline, b''): print(line.decode().strip()) exitcode = process.wait() return process, exitcode def exe_sql_command(sql_command, redirect=None): """ 执行 hive sql 命令并转储到文件 :param sql_command: sql 命令 :param redirect: 是否重定向输出到文件 :return: process, exitcode """ command = "hive -e \"%s\"" % sql_command if redirect: command += f" > {redirect}" return exe_command(command) def exe_sql_file(sql_file, redirect=None): """ 执行 hive sql 文件并转储到文件 :param sql_file: sql 文件 :param redirect: 是否重定向输出到文件 :return: process, exitcode """ command = f"hive -f {sql_file}" if redirect: command += f" > {redirect}" return exe_command(command)