没有stdout输出的启动过程

时间:2014-08-27 16:58:55

标签: python

我使用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。

2 个答案:

答案 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。