我有一个python系统调用需要一段时间才能完成。
os.system("call_that_takes_quite_some_time")
同时我想继续抛出一条“等待......”的消息,直到os.system返回0或错误。 / 我该怎么做呢? python中有什么东西可以在while循环中“监听”吗?
答案 0 :(得分:8)
os.system
等待命令执行完成。
使用subprocess.Popen
可以检查输出或错误。 Popen提供句柄,你可以使用wait检查返回代码,找出命令成功/失败。例如:
proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while proc.poll() is None:
print proc.stdout.readline() #give output from your execution/your own message
self.commandResult = proc.wait() #catch return code
答案 1 :(得分:1)
您可以使用threading
import os
import time
import threading
def waiter():
waiter.finished = False
while not waiter.finished:
print 'Waiting...'
time.sleep(1)
os_thread = threading.Thread(target=waiter)
os_thread.daemon = True
os_thread.start()
return_value = os.system('sleep 4.9')
return_value >>= 8 # The return code is specified in the second byte
waiter.finished = True
time.sleep(3)
print 'The return value is', return_value
这将打印"等待......"每1秒发送一条消息,并在waiter.finished
设置为True
后停止(在这种情况下会有5"等待..."消息)
但不推荐使用os.system
。 documentation建议使用subprocess
模块。