import subprocess,os,sys,time class TimeoutError(Exception): pass def excuteCommand(com,timeout=60): ex=subprocess.Popen(com,stdout=subprocess.PIPE,stdin=subprocess.PIPE,shell=True) pid = ex.pid print('cmd pid:', pid) tBeginning = time.time() # 这是当前时间戳 secondsPassed = 0 # 这是过去了多少秒 while True: if ex.poll() is not None: # 这是判断程序是否执行完 break # 如果程序已经执行完,就跳出读秒情节 secondsPassed = time.time() - tBeginning +1 # 拿当前时间减开始时间,就是读秒 print(secondsPassed) if timeout and secondsPassed > timeout: # 如果timeout有值,且读秒大于timeout就发送sigterm信号 ex.terminate() # 终止程序 #ex.kill()#杀死进程,我还不知道他俩的差别 #raise TimeoutError(com, timeout) time.sleep(1) out, err = ex.communicate(input=None)#我的问题在这里,已经给子进程发送停止信号了,为什么不立刻返回子进程的out? status=ex.wait() print('cmd in:',com) print('cmd out:',out.decode('gb18030')) print('cmd status:',status) print('cmd pid:',pid) return out.decode('gb18030') result=excuteCommand('ping baidu.com -n 30',10)
已经给子进程发送停止信号了,为什么不立刻返回子进程的out?
最新推荐文章于 2023-06-28 15:47:13 发布