我有一个函数可以打开一个进程并发送命令,获取结果并基于此运行更多命令。在任何阶段它都可能失败并返回,或者最后它会打印出成功声明。现在这一切都发生在主线程上,所以我的程序在发生这种情况时会停止(大约需要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()
然而,不仅仅是在前台运行。
答案 0 :(得分:1)
您已在Python流程中创建了一个后台线程,但似乎您需要在shell中使用后台进程。
Python进程不会退出,直到所有非守护程序线程完成(它在关闭时加入它们)。
您可以将整个脚本放入shell中的后台:
bash$ nohup python your_script.py &>output &
Python进程可以使用daemon包进行python-daemon
,但守护进程通常不用于一次性任务。