我正在寻找一种方法将文本文件绑定到我的机器上的端口,与流动的Linux命令相同
cat myfile.txt | pv -l -L 2000 -q | nc -lk 9999
我想在Windows上使用它,所以我不能直接使用上面的命令。我想这样做,因为我有另一个Python代码(使用pyspark),它从这个端口读取数据作为流。
data = StreamingContext(sc, 1).socketTextStream("localhost", 9999)
答案 0 :(得分:1)
https://docs.python.org/2/library/socket.html可能是相关的文档。
我对pyspark一无所知,但我的猜测是这样的:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 9999))
s.listen(1)
con, adr = s.accept()
with open('myfile.txt') as f:
for line in f:
con.sendall(line)
con.close()
应该有效。它逐行发送,这可能适用于您的用例(我注意它是一个文本文件)。
如果你想要在你去的时候打印一些统计数据:
from __future__ import print_function
import sys
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 9999))
s.listen(1)
print('listening')
con, adr = s.accept()
print('connected')
with open('myfile.txt') as f:
f.seek(0,2) # go to end of file
filesize = f.tell()
f.seek(0)
sent = 0
for line in f:
con.sendall(line)
sent += len(line)
print('%s of %s' % (sent, filesize), end='\r')
sys.stdout.flush()
con.close()
此代码发送文件,然后关闭。如果您希望它重复发送文件,或将其发送给多个客户端,那么您可以扩展它来执行此操作,但它有点复杂。