【发布时间】:2014-08-27 16:58:55
【问题描述】:
我正在使用 python 脚本作为引导程序来启动一个长时间运行的 java 服务。
call = [ "java", "-cp", ... ]
with open(os.devnull, 'w') as fnull:
subprocess.Popen(call, stdout=fnull)
print "Service started."
但是当 python 进程完成时,我仍然从 java 进程中获取 stdout 输出。我认为这是因为 python 关闭了我的fnull,所以它恢复到正常的标准输出。
我怎样才能实现我想要的?
编辑:顺便说一句,如果可能的话,最好仍然获得stderr,但如果它增加了任何复杂性,那就不行了。
EDIT2:看来我是个白痴,被写入的是stderr。
【问题讨论】:
-
你确定你看到的是
stdout而不是stderr? -
stdout指向/dev/null,你看不到它。您的 java 进程可能正在向stderr发送消息。 -
一旦子进程分叉,父文件描述符发生什么都没有关系。孩子得到/dev/null。为标准错误假设投票。
-
是的 - 我是个白痴,被写入的是 stderr。谢谢大家。
标签: python