使用Python的TCP端口 - 如何将命令输出转发到TCP端口?

4
我可以帮您翻译成中文。需要开发一个Python代码,在本地打开一个端口并将日志发送到该端口。日志实际上是指Python文件的命令输出。例如:
hello.py

i = 0  
while True:  
    print "hello printed %s times." % i  
    i+=1

这将持续打印该语句。我希望这个持续的输出被发送到已打开的端口。

有人能告诉我如何做到这一点吗?

提前致谢!


什么协议?HTTP?FTP?.. 端口的另一侧是什么?我指的是服务器。 - pyfunc
@pyfunc - 没有协议,我正在本地主机上使用。 - sam
@pastjean:好的,我会查看相同的内容。谢谢。 - sam
2个回答

14

这是我的做法。

要在你的脚本中使用,你需要:

hello.py | thisscript.py

希望这是你想要的。

import socket
import sys

TCP_IP = '127.0.0.1'
TCP_PORT = 5005

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
while True:
  line = sys.stdin.readline()
  if line:
    s.send(line)
  else:
    break

s.close()

可以通过 argv 扩展此内容以指定端口。


4

外部

无需修改您的Python代码:

Bash

hello.py >/dev/tcp/$host/$port # if tcp
hello.py >/dev/udp/$host/$port # if udp

netcat

hello.py | nc $host $port      # if tcp
hello.py | nc -u $host $port   # if udp

内部的

使用socket模块。

import socket

sock= socket.socket(socket.AF_INET, socket.SOCK_STREAM) # if tcp
sock= socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # if udp

# if it's TCP, connect and use a file-like object
sock.connect( (host, port) )
fobj= sock.makefile("w")
# use fobj and its write methods, or set sys.stderr or sys.stdout to it

# if it's UDP, make a dummy class
class FileLike(object):
    def __init__(self, asocket, host, port):
        self.address= host, port
        self.socket= asocket
    def write(self, data):
        self.socket.sendto(data, self.address)
fobj= FileLike(sock, host, port)

你可以通过添加 print >>fobj, "hello printed %s times." % i 或者 print("hello printed {} times.".format(i), file=fobj) 使你的示例可复制粘贴,分离tcp、udp代码并为 hostport 指定具体值,提供一个示例服务器(nc -l)。 - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接