我需要運行一個程序並將其輸出採集到標準輸出。這個程序(socat)需要在python腳本的後臺運行。 Socatat一旦運行就會處於dameon模式,但首先它會輸出一些行,以便爲我的腳本的其餘部分提供所需的stdout。Python運行守護進程子進程和讀取標準輸出
命令:socat -d -d PTY: PTY:
輸出:
2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/1
2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/2
2011/03/23 21:12:35 socat[7476] N starting data transfer loop with FDs [3,3] and [5,5]
...
我基本上要運行,在我的程序的啓動和保持運行狀態,直到腳本結束,但我需要將兩個/ dev/pts/X名稱讀入python。
誰能告訴我如何做到這一點?
我想出了這只是掛起,我猜是因爲它阻止子進程終止。
#!/usr/bin/python
from subprocess import Popen, PIPE, STDOUT
cmd = 'socat -d -d PTY: PTY: &'
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
output = p.stdout.read()
# Process the output
print(output)
感謝所有幫助
編輯:看來,這可能會寫入標準錯誤,但劇本還只是與不&甚至從標準錯誤讀hanges。
沒有'&'嗎? – 2011-03-23 21:28:06
不好(可惜不是,它只是掛起。 – Jason 2011-03-23 21:31:20
您是否嘗試過在打印語句中添加以確認在您調用'Popen'後阻止並在read()'調用上阻塞? – Jeff 2011-03-23 22:26:47