如何在脚本中与shell进行交互

时间:2018-01-13 07:38:31

标签: python shell

我想像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())

0 个答案:

没有答案