我有一个进程(agxp)接收数据并将其写入文件,而另一个进程将数据发送至另一个进程。
当agxp启动时,它应该立即产生一些输出。我希望主进程一直阻塞,直到它看到agxp在文件中输出的第一行为止。
我通过比较文件的统计信息来检查第一行是否已写入文件,但它们始终相同。所以我陷入了while循环中。为什么会这样?
rvListen_AGX = "tibrvlisten -service " + agxService + " -network " + agxNetwork + " -daemon " + domain
agxf = open(self.AGX_logFileName, 'w')
agxstat = os.stat(self.AGX_logFileName)
agxp = subprocess.Popen(rvListen_AGX.split(), stdout = agxf, bufsize=0)
while os.stat(self.AGX_logFileName) == agxstat:
print agxstat
print os.stat(self.AGX_logFileName)
stxf.flush()
sleep(0.1)
要等到子进程向其stdout中写入一行并将子stdout保存到文件中,请执行以下操作:
import shutil
from subprocess import Popen, PIPE
from threading import Thread
def copy_and_close(source, destination):
with source, destination:
shutil.copyfileobj(source, destination)
agx_cmd = ("tibrvlisten -service {agxService} -network {agxNetwork} "
"-daemon {domain}".format(**vars())).split()
agx_process = Popen(agx_cmd, stdout=PIPE, bufsize=1)
agx_file = open(self.AGX_logFileName, 'wb')
agx_file.write(agx_process.stdout.readline()) # block until a line is read
Thread(target=copy_and_close, args=[agx_process.stdout, agx_file]).start()
# do other things here..
rc = agx_process.wait()
如果在agx_process
运行时不需要执行其他操作,则可以调用copy_and_close()
主线程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句