Python使用subprocess模块执行shell命令且自动退出命令

发布时间:2024年01月04日

exec_command()函数不能实现在1秒后自动退出。要实现这个功能,您需要使用subprocess模块的另一个函数——timeout。下面是一个示例:

import subprocess
import sys

arg_1 = sys.argv[1]
arg_2 = sys.argv[2]
arg_3 = sys.argv[3]

def exec_command(command, dir, timeout):
    try:
        process = subprocess.Popen(command, shell=True, cwd=dir,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = process.communicate(timeout=timeout)
        return stdout.decode("utf-8"),stderr.decode("utf-8")
    except subprocess.TimeoutExpired:
        process.kill()
        stdout, stderr = process.communicate()
        return stdout.decode("utf-8"),stderr.decode("utf-8")

# 示例用法
output = exec_command(arg_1, arg_2, timeout=int(arg_3))
print(output)

在这个例子中,exec_command()函数使用subprocess.Popen()执行命令,并通过stdoutstderr捕获输出结果。然后,使用communicate(timeout=timeout)函数设置超时时间为1秒,如果在1秒内命令没有完成,就会引发TimeoutExpired异常。在异常处理中,使用process.kill()终止进程,然后通过communicate()获取输出结果。

请注意,使用此方法执行命令需要Python 3.3及更高版本。如果您使用的是Python 3.2或更早的版本,您需要使用subprocess.check_output()函数来替代subprocess.Popen()communicate()函数的使用。

文章来源:https://blog.csdn.net/songpeiying/article/details/135393541
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。