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()
执行命令,并通过stdout
和stderr
捕获输出结果。然后,使用communicate(timeout=timeout)
函数设置超时时间为1秒,如果在1秒内命令没有完成,就会引发TimeoutExpired
异常。在异常处理中,使用process.kill()
终止进程,然后通过communicate()
获取输出结果。
请注意,使用此方法执行命令需要Python 3.3及更高版本。如果您使用的是Python 3.2或更早的版本,您需要使用subprocess.check_output()
函数来替代subprocess.Popen()
和communicate()
函数的使用。