unix crontab 不支持 python 的 subprocess.popen
我正在使用crontab来启动一个Python脚本,这个脚本应该能自己启动几个进程,使用的是subprocess.popen()。我用这个命令来启动一个可能需要30分钟的过程,所以我不想等结果,而是希望继续运行我原来的crontab脚本。问题是,crontab似乎把subprocess.popen当成了subprocess.call来处理!
我在日志文件和进程列表中清楚地看到,第一个popen成功了,但它并没有在后台继续运行,而是等到第一个popen的进程结束...
这可能是因为我把错误输出和标准输出重定向到一个文件吗?我不太明白这个关联,但也许...
我的代码如下:
# inside process spawning loop
# open and append process to list
mainLogger.debug("about to launch process with popen")
scoopPopenObj = subprocess.Popen(cmdArgsString,
shell=True,stdout=qScoopLogFile,stderr=qScoopLogFile)
openScoops.append((fileName,time.time(),scoopPopenObj))
# rest of script, here is where i dont get until scoopPopenObj finishes..
有什么想法吗?
1 个回答
1
我不确定这是否跟问题有关,但在把 stderr
(错误输出)重定向到和 stdout
(正常输出)同一个管道时,你应该使用 stderr=subprocess.STDOUT
,具体可以参考文档里的说明。