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

时间:2010-12-03 05:20:02

标签: python command-line tcp send

我想在python中开发一个代码,它将在localhost中打开一个端口,并将日志发送到该端口。日志只是python文件的命令输出。

喜欢:

hello.py

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

这将不断打印声明。 我想要这个续。输出发送到打开的端口。

谁能告诉我我怎么能这样做?

提前致谢

2 个答案:

答案 0 :(得分: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

指定端口

答案 1 :(得分: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

内部

使用套接字模块。

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)