0

我有一个函数可以打开一个进程并发送命令、获取结果并在此基础上运行更多命令。在任何阶段它都可能失败并返回,或者在最后打印出成功声明。现在这一切都发生在主线程上,所以我的程序在发生这种情况时停止了(大约需要 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()

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

4

1 回答 1

1

您已经在 Python 进程中创建了一个后台线程,但您似乎希望在您的 shell 中有一个后台进程。

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

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

bash$ nohup python your_script.py &>output &

或者在屏幕tmux内运行它。

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

于 2013-04-11T15:57:29.977 回答