我想像javascript或python shell一样与脚本引擎交互,然后为浏览器提供服务。它只允许在网页中使用shell。(我不擅长英语:) 主要的问题是fr.readline无法从os.pipe()的读取端读取任何数据。我认为原因是子进程打开了这个文件描述符。它让我想起了错误 - '资源暂时不可靠的#39; 因为当我使用os.fdopen创建与管道写入端的文件关联时,只有在我没有关闭写文件的情况下,读取端也无法恢复数据,这就是为什么我使用os.write将数据发送到子进程。
import os
import sys
from select import select
from socket import *
p1=os.pipe()
p2=os.pipe()
pid=os.fork()
if pid==0:
os.close(p1[0])
os.close(p2[1])
os.dup2(p1[0],0) # redirect input and output of this python shell
os.dup2(p2[1],1)
os.execvp('python',['python'])
else:
os.close(p1[0])
os.close(p2[1])
fr=os.fdopen(p2[0])
server=socket()
server.bind(('0.0.0.0',42800))
server.listen(1)
while True:
client,addr=server.accept()
while True:
if select([fr],[],[],1)[0]:
msg=fr.readline()
msg=client.recv(1024)
print msg
os.write(p1[1],msg)
while not select([fr],[],[],1)[0]:
continue
rep=fr.readline()
client.send(rep)
while not select([fr],[],[])[0]:
client.send(fr.readline())