强制在管道中执行bash以启用回显

时间:2013-08-11 15:32:23

标签: python bash

我正在python中创建一个webshel​​l,实际上,用户将通过Web服务器使用他最喜欢的shell。我的想法是创建一个subprocess.Popen bash -i并在webapp中创建两个函数readwrite,分别读取stdout或写入stdin的{​​{1}}。

我用:

启动shell
subprocess

写作没问题,但是当我读取标准输出时,我没有读到用户输入:

p = subprocess.Popen(["script","-f","-c","bash -i -l"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

我可以强制回显将用户输入添加到输出但这不是很优雅,因为如果用户使用某个阻止回显的程序(如密码输入),则用户输入将始终显示在网页中。

那么,有一种方法,比如 while select.select([p.stdout],[],[],0)[0]!=[] or select.select([p.stderr],[],[],0)[0]!=[]: if(select.select([p.stdout],[],[],0)[0]!=[]): data+=p.stdout.read(1) if(select.select([p.stderr],[],[],0)[0]!=[]): data+=p.stderr.read(1) 参数中的一个选项,强制它将输入添加到输出中吗?


PS:如果你想知道为什么我使用bash来运行script是因为单独运行bash会导致bash自行停止

python

尽管我还没弄清楚为什么会发生这种情况,我已经找到了如何防止它出现这个问题:Main Python Process is stopped using subprocess calls in SocketServer

1 个答案:

答案 0 :(得分:0)

  

那么,有一种方法,比如bash参数中的一个选项,强制它将输入添加到输出中吗?

是:您可以使用-v命令行选项(“在读取时打印shell输入行。”)。