如何从os.system检查错误代码?

时间:2014-04-03 08:33:15

标签: python python-3.x

我有一个python系统调用需要一段时间才能完成。

os.system("call_that_takes_quite_some_time")

同时我想继续抛出一条“等待......”的消息,直到os.system返回0或错误。 / 我该怎么做呢? python中有什么东西可以在while循环中“监听”吗?

2 个答案:

答案 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.systemdocumentation建议使用subprocess模块。