成功或失败时返回值的线程?

时间:2013-04-11 15:14:28

标签: python

我有一个函数可以打开一个进程并发送命令,获取结果并基于此运行更多命令。在任何阶段它都可能失败并返回,或者最后它会打印出成功声明。现在这一切都发生在主线程上,所以我的程序在发生这种情况时会停止(大约需要6分钟)。如何更改此代码以在后台运行,但最后打印出我需要的一行?

这是一个片段:

def ran_network_listen(access_point_id):
    # "read hnb" command, check if location has IP set.
    proc = subprocess.Popen(cmd_rancli, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    proc_stdout  = proc.communicate(ran_opt_read_hnb)[0]

    parse = proc_stdout.split('\n')
    list_of_aps = ""
    for item in parse:
        if  access_point_id in item:
            if "n/c" in item:
                print "AP has no ip."
                #return
            else:    
                print item
        list_of_aps += item      

    if not access_point_id in list_of_aps:
        print "AP not registered"
        return
    //etc

首先我试过这个:

  t = Thread(target=ran_network_listen, args=(args.ap_id,))
  t.start()

然而,不仅仅是在前台运行。

1 个答案:

答案 0 :(得分:1)

您已在Python流程中创建了一个后台线程,但似乎您需要在shell中使用后台进程

Python进程不会退出,直到所有非守护程序线程完成(它在关闭时加入它们)。

您可以将整个脚本放入shell中的后台:

bash$ nohup python your_script.py &>output &

或在screentmux内运行。

Python进程可以使用daemon包进行python-daemon,但守护进程通常不用于一次性任务。