我使用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。
答案 0 :(得分:0)
侧面注释的部分答案,它很容易获得stderr(当你想要stdout和stderr时它更复杂)。它有一个额外的好处,它会告诉你你认为在stdout上的java输出是否真的在stderr上。
call = [ "java", "-cp", ... ]
with open(os.devnull, 'w') as fnull:
subprocess.Popen(call, stdout=fnull, stderr=subprocess.PIPE)
print "Service started."
for line in stderr:
print 'stderr: ', line.strip()
答案 1 :(得分:-1)
如果你可以让python脚本生效
Popen.communicate(输入=无)
与流程交互:将数据发送到stdin。从stdout和stderr读取数据,直到达到文件结尾。等待进程终止。可选的输入参数应该是要发送到子进程的字符串,如果没有数据应该发送给子进程,则为None。