选择。选择插座和管道问题

2024-09-28 17:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在编写一个基本的python脚本,它同时使用管道和套接字。管道当前保存来自html表单的传入数据,套接字连接到以不同间隔发送TCP/IP命令的服务器。窗体和服务器在同一LAN上,但在不同的计算机上。在

我的代码如下:

#!/usr/bin/env python
import os,sys,time
from socket import *

HOST = 'xxx.xxx.xxx.xxx'
PORT = 6000
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
count = 0
pipe_name = 'testpipe'

if not os.path.exists(pipe_name):
    os.mkfifo(pipe_name)

def readpipe():
    pipein = open(pipe_name, 'r')
    line = pipein.readline()[:-1]
    print line
    pipein.close()

def readTCP():
    data = tcpCliSock.recv(BUFSIZ)
    print data

while count == 0:
    readTCP()
    readpipe()

我意识到count变量目前是多余的,我一直在用它来调试一些早期的问题

如您所见,代码非常简单,只要数据首先进入管道,然后进入套接字并保持这种模式,代码就可以工作。问题是它不能动态地运行这两个函数。它在套接字的任一管道处等待输入时挂起。我试图找到一种方法来识别管道或插座上是否没有数据,然后它可以关闭并检查另一个。到目前为止,我所做的一切都没有效果,比如检查一个空字符串。在

我在下面的帖子中发现了一些有趣的东西,但它似乎与我正在做的(使用stdin)有点不同,所以我不确定它是否是我真正想要的,或者它是否可以被改编

访问What's the best way to tell if a Python program has anything to read from stdin?

根据“用户”的建议,我现在编写了一些附加代码:

^{pr2}$

虽然这样做是可行的,但我还无法发现要将哪个标识符放入管道的inputdata中。我已经读过关于select模块的文章,很明显它确实可以与管道一起工作,但似乎很少有关于它的信息,它都是联网的东西。 我尝试了以下方法(取自上面的主代码):

 testpipe
 pipe_name
 pipein

但是我得到了各种各样的错误,其中大多数都与namererror-未定义TypeError:参数必须是int,或者有一个fileno()方法


Tags: 数据方法代码namefromimport服务器管道