unix crontab 不支持 python 的 subprocess.popen

5 投票
1 回答
782 浏览
提问于 2025-04-17 09:52

我正在使用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,具体可以参考文档里的说明。

撰写回答