套接字和管道的 select.select 问题

2024-01-20

我目前正在编写一个使用管道和套接字的基本 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 变量目前是多余的,我一直在使用它来尝试调试一些早期的问题

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

我在下面的帖子中发现了一些有趣的东西,但它似乎与我正在做的事情(使用标准输入)有很大不同,所以我不确定这是否是我真正想要的东西或者是否可以对其进行调整;

Visit 判断 Python 程序是否可以从 stdin 读取任何内容的最佳方法是什么? https://stackoverflow.com/questions/699390/whats-the-best-way-to-tell-if-a-python-program-has-anything-to-read-from-stdin

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

while True:
   inputdata,outputdata,exceptions = select.select([tcpCliSock],[],[])
   if tcpCliSock in inputdata:
      data = tcpCliSock.recv(BUFSIZ)
      print data

尽管这有效,但我无法发现将什么标识符放入管道的输入数据中。我已经阅读了选择模块,显然它确实可以与管道一起使用,但关于它的信息似乎很少,它都是联网的东西。 我尝试了以下方法(取自上面的主代码):

 testpipe
 pipe_name
 pipein

但我收到各种错误,其中大部分与名称错误 - 未定义 or 类型错误:参数必须是 int,或者具有 fileno() 方法


通常你会使用select用于此的模块。

import select
sockets_with_read_data, sockets_with_write_data, sockets_with_some_data = \
    select.select([sock, pipe], [], [], timeout = None)

但我不知道这是否适用于管道。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

套接字和管道的 select.select 问题 的相关文章

随机推荐

  • 使用Excel在PHP应用程序中进行核心分析?

    我认为这确实是一个关于方法的问题 我们有一个来自第三方的核心 Excel 电子表格 它提供了对原始数据的一些复杂分析 原始数据直接来自客户的第二个电子表格 我们希望创建一个基于网络服务器的自动化系统 可以上传原始数据 Excel 文件并进行
  • 有没有办法连接 html 属性中的字符串?

    我正在使用 MVC3 并且想使用分部视图来创建动态 DOM 元素 这是我目前的部分观点 model MVCApp ViewModels TitlesViewModel div class display label Name div div
  • 犰狳安装

    您好 我按照 README txt 的说明将 Armadillo3 0 1 安装在我自己的工作目录 home me package armadillo3 0 1 中 但是当我尝试一个例子时 g I home me package armad
  • 在 OSX 上替换 libstdc++.dylib (4.0) 全局新建和删除运算符

    我正在努力用 XCode 3 2 GCC 4 2 libstdc 4 0 动态版本替换全局 new 和删除运算符 我直接从标题 new 中获取原型并实现它们 它们粘贴在下面 该项目是一个 plugin 因此是一个动态库 该插件必须将分配委托
  • 了解 Python 如何“编译”或“解释”函数对象

    我已阅读以下帖子 但我仍然不确定某些事情 Python编译 解释过程 https stackoverflow com questions 3299648 python compilation interpretation process 为
  • 处理 Ember.js 中的验证错误

    我有一个 Rails 应用程序 为 Ember 前端提供 json 服务 我正在尝试在客户端的表单上显示验证错误 Rails 返回这个 json errors hometown is too long maximum is 64 chara
  • 同时将 AuthorizeAttribute 应用于控制器类和操作

    是否有一种方法可以在具有 Authorize 属性的控制器类的一个操作中忽略 Authorize 属性 Authorize public class MyController Controller Authorize Users I tri
  • 根据添加到主屏幕的 URL 在 Web 应用程序清单中设置 start_url

    我的网站有几个小部分 当用户将网站添加到他们的主屏幕时 我想确保主屏幕图标将他们启动到他们添加到主屏幕时所在的小部分 我可以为每个小节注册不同的清单 但这对于没有页面重新加载的单页应用程序不起作用 我正在考虑将小节存储在 cookie 中
  • 使用 C# 编码波斯语字符串

    我正在开发一个短信应用程序 使用C 对于通过 SMS 网关向客户发送交易警报 即 ATM 交易 的银行 该应用程序工作正常 唯一的问题是编码波斯语文本 它没有正确编码波斯语文本 以下是将波斯语文本编码为 UTF 16 格式的方法 publi
  • 如何从 .pb 转换为 .tflite?

    我使用创建了一个对象检测模型Pytorch然后转换自 pth to onnx进而 pb 但现在我需要将其转换为 tflite适用于 Android 应用程序 怎么做 这是我第一次 input arrays 64 3 224 224 outp
  • 编译Linux内核错误xt_CONNMARK.h

    由于非常具体的原因 我尝试编译 Linux 2 6 32 6 内核 并在内核中内置了多个模块 我已将根文件系统包含在 NFS 上 以尝试通过 LAN PXE 启动我自己的自定义救援 Live CD 在包含 ROOT NFS 所需的依赖项和模
  • 是否可以在不编写新文件的情况下将文本合成语音?

    我想使用 GCP 文本到语音 API 合成文本到语音 几乎我能找到的每个示例都会写入一个新文件 我想在该函数输入文本并通过计算机扬声器读取它时执行此操作 我一直在尝试转换 GCP 上传的代码 表示 你好 世界 我还没有找到一种方法可以在转换
  • 将 SelectSingleNode 与 XPath 结合使用会返回 NULL

    我尝试修改 XML 文件SelectSingleNode 文件的结构是
  • Rails 安装错误:“原子”本机 gem 需要安装构建工具[重复]

    这个问题在这里已经有答案了 我正在我的 Windows 上安装 Rails 3 我安装了最新的 ruby 2 0 0 并更新了 gems 但是当我使用 gem install Rails 安装 Rails 时 成功的消息来了 但最后我发现
  • 自定义字体连字

    我正在使用 Visual Studio Code 我看到所有这些很酷的字体连字 用于双等号和三等号 箭头等 我不禁想知道是否有任何方法可以向字体或 VS Code 添加新的自定义连字 我尝试进行一些网络搜索 但似乎找不到任何内容 例如 当我
  • Ansible 内置 Lineinfile 到 ~/.bashrc

    我对 ansible 比较陌生 所以如果这个问题遗漏了一些东西 我很抱歉 我的目标是添加一行 bashrc使用 ansible 文件 我认为最好的方法是ansible builtin lineinfile module 不幸的是 我已经运行
  • AttributeError:无法设置 python 列表属性的属性

    我正在与python docx来自分叉的库version https pypi org project bayoo docx 并且我在编辑元素列表时遇到问题 因为它被定义为属性 docx document Document property
  • 我什么时候应该使用 Rosette 的浅嵌入与深嵌入进行程序综合?

    一些教程Rosette https docs racket lang org rosette guide index html引入程序综合使用浅嵌入 https docs racket lang org rosette guide ch e
  • 无法使用无头模式 Selenium 定位元素

    由于 所有用户在访问我们的网站时必须使用谷歌浏览器 这一限制 我无法使用无头模式定位元素 此限制是由我们的管理员添加的 因此用户只能使用 Google Chrome 我的代码是 Test priority 1 public void set
  • 套接字和管道的 select.select 问题

    我目前正在编写一个使用管道和套接字的基本 python 脚本 管道当前保存来自 html 表单的传入数据 套接字建立与服务器的连接 以不同的时间间隔发送 TCP IP 命令 表单和服务器位于同一 LAN 但不同的计算机上 我的代码如下 us