我使用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
,因此它恢復爲正常的stdout。
我怎樣才能達到我想要的?
編輯:在一個側面說明,如果可能,仍然會很好,但不會增加任何複雜性。
編輯2:這似乎是我非常愚蠢的,這是正在寫的stderr。
你確定它確實是'stdout'而不是'stderr'你看到了嗎? – FatalError 2014-08-27 17:04:05
'stdout'指向'/ dev/null',你看不到它。你的java進程可能發送消息到'stderr'。 – 2014-08-27 17:05:07
一旦子進程分叉,父文件描述符會發生什麼並不重要。孩子得到/ dev/null。將我的投票加入stderr假設。 – tdelaney 2014-08-27 17:09:33