适用于Windows的python os.mkfifo()

适用于Windows的python os.mkfifo(),第1张

适用于Windows的python os.mkfifo()

遵循以上两个答案,我不小心碰到了答案。os.pipe()完成了工作。谢谢您的回答。

我正在发布完整的代码,以防其他人正在寻找这个:

import subprocessfrom threading import Threadimport timeimport sysimport loggingimport tempfileimport osimport game_playing_moduleclass Pusher(Thread):    def __init__(self, source, dest, proc, name):        Thread.__init__(self)        self.source = source        self.dest = dest        self.name = name        self.proc = proc    def run(self):        while (self.proc.poll()==None) and   (not self.source.closed) and (not self.dest.closed): line = self.source.readline() logging.info('%s: %s' % (self.name, line[:-1])) self.dest.write(line) self.dest.flush()def get_reader_writer():    fd_read, fd_write = os.pipe()    return os.fdopen(fd_read, 'r'), os.fdopen(fd_write, 'w')def connect(exe):    logging.basicConfig(level=logging.DEBUG,  format='%(message)s',  filename=LOG_FILE_NAME,  filemode='w')    program_to_grader_reader, program_to_grader_writer =        get_reader_writer()    grader_to_program_reader, grader_to_program_writer =        get_reader_writer()    p1 = subprocess.Popen(exe, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)    old_stdin = sys.stdin    old_stdout = sys.stdout    sys.stdin = program_to_grader_reader    sys.stdout = grader_to_program_writer    push1 = Pusher(p1.stdout, program_to_grader_writer, p1, '1')    push2 = Pusher(grader_to_program_reader, p1.stdin, p1, '2')    push1.start()    push2.start()    game_playing_module.play()    sys.stdin = old_stdin    sys.stdout = old_stdout    fil = file(LOG_FILE, 'r')    data = fil.read()    fil.close()    return dataif __name__=='__main__':    if len(sys.argv) != 2:        print 'Usage: connect.py exe'        print sys.argv        exit()    print sys.argv    print connect(sys.argv[1])


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5650067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存