python输入输出重定向_Python 重定向标准输入和输出到套接字的一种方式

下面是客户端的示例代码,客户端的输出重定向到套接字,同时使用该套接字作为标准输入,这样通过远端的服务器就可以接受到客户端的输出,也可以通过套接字向客户端输入数据:

import sys

import socket

# 首先窗口一个套接字,连接到某一个服务器

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('192.168.128.100', 50000))

# 得到套接字对应的文件, 可以读写,并且不进行缓冲

f = s.makefile("rw", 0)

# 使用 sys 进行重定向

sys.stdin = f

sys.stdout = f

sys.stderr = f

# 下面是你的程序代码,其中 print 语句以及其他写向控制台的语句都会输出到该套接字中,例如

print ‘abc’

# 如果需要得到标准输入,那么

x = raw_input(">>>")

print "echo:", x

...

# 最后恢复标准输入和输出设备

sys.stdin = sys.__stdin__

sys.stdout = sys.__stdout__

sys.stderr = sys.__stderr__

f.close()

s.close()

##

## 下面是服务器端的代码

def start_server(port):

"""创建套接字"""

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

name = socket.gethostname()

host = socket.gethostbyname(name)

s.bind((host, port))

s.listen(1)

# 等待客户端的连接

s1, addr = s.accept()

# 启动接受数据线程,也就是用来读重定向到标准输出的数据,这里只是简单的把

# 客户端的输出显示在服务器的标准输出上

t = threading.Thread(target=read_stdout_thread, args=(s1,))

t.start()

# 模拟标准输入,向客户端发送数据; 对客户端而言,相当于得到键盘输入 'xyz'

s1.sendall('xyz')

def read_stdout_thread(s):

while 1:

ch = s.recv(1)

sys.stdout.write(ch)

if not ch: break

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值