Twisted Python:无法写入正在运行的生成进程

2023-12-12

我的问题是,在生成进程后,子进程正在循环以从其标准输入获取数据。我想使用 Echo.Process.pipes[0].write(data) 或 Echo.Process.writeToChild(0,data) 向其写入新数据,但两者都不起作用。有人能解释一下发生了什么事吗?或者我该如何解决这个问题?

这是我得到的错误:

--- <exception caught here> ---
  File "/usr/local/encap/python-2.6.4/lib/python2.6/site-packages/Twisted-9.0.0-py2.6-linux-x86_64.egg/twisted/internet/selectreactor.py", line 146, in _doReadOrWrite
    why = getattr(selectable, method)()
  File "/usr/local/encap/python-2.6.4/lib/python2.6/site-packages/Twisted-9.0.0-py2.6-linux-x86_64.egg/twisted/internet/tcp.py", line 460, in doRead
    return self.protocol.dataReceived(data)
  File "pp1.py", line 30, in dataReceived
    Echo.Process.pipes[0].write(data)
exceptions.KeyError: 0

谢谢你,

Q

from sys import executable
from os import environ
import os
from twisted.internet import reactor
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet import protocol
import sys

implementation = """\
import os
import time
import sys

print "in child", os.getpid()

while (True):
        a = raw_input("")
        if a: print a
"""


class Echo(Protocol):
    Process = None
    def dataReceived(self, data):
        if Echo.Process == None:
                pp = MyPP()
                Echo.Process = reactor.spawnProcess(pp, executable, [executable, "-c", implementation, data], env=environ, childFDs = {0:1, 1:1, 2:2})
        else:
                Echo.Process.pipes[0].write(data)
                #Echo.Process.writeToChild(0,data)
        self.transport.write(data)

class EchoFactory(Factory):
    def buildProtocol(self, addr):
        return Echo()

class MyPP(protocol.ProcessProtocol):
    def connectionMade(self):
        print "connectionMade!"
    def outReceived(self, data):
        print "out"
    def errReceived(self, data):
        print "error", data
    def processExited(self, reason):
        print "processExited"
    def processEnded(self, reason):
        print "processEnded"
        print "quitting"

reactor.listenTCP(8200, EchoFactory())
print 'in parent', os.getpid()
reactor.run()

要在每个传入连接上创建一个新进程并将所有输入数据重定向到进程的标准输入:

#!/usr/bin/python
from twisted.internet import reactor

from twisted.internet import protocol

class Echo(protocol.Protocol):
    def connectionMade(self):
        self.pp = MyPP()
        reactor.spawnProcess(self.pp, 'cat', ['cat'])
    def dataReceived(self, data):
        self.pp.transport.write(data)
    def connectionLost(self, reason):
        self.pp.transport.loseConnection()

class MyPP(protocol.ProcessProtocol):
    def connectionMade(self):
        print "connectionMade!"
    def outReceived(self, data):
        print "out", data,
    def errReceived(self, data):
        print "error", data,
    def processExited(self, reason):
        print "processExited"
    def processEnded(self, reason):
        print "processEnded"
        print "quitting"

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

Twisted Python:无法写入正在运行的生成进程 的相关文章

随机推荐

  • 如何在缩放的图像上绘图?

    我有一个图片框Size我的应用程序中为 400X400 这SizeMode图片框的设置为Zoomed 我在图片框中加载了一张700X446的png图像 我有以下问题 尽管我沿着红色路径绘制一条黑色直线 但实际上它是沿着加载的图像以透视方式显
  • Python 标记化

    我是 Python 新手 我有一个标记化作业 输入是一个包含句子的 txt 文件 输出是带有令牌的 txt 文件 当我说令牌时 我的意思是 简单的单词 我有这个功能 输入 Elemnt 是一个带或不带标点符号的单词 可以是这样的单词 嗨或说
  • 单击 android hello world 程序中的按钮时出现 IllegalStateException

    我是 android 新手 我正在尝试实现 android google 开发人员网站上给出的 MyFirstApp 因此应用程序包含一个文本框和按钮 如果您在文本字段中输入任何文本并单击按钮 它会在屏幕上显示相同的内容 但有问题当我点击发
  • jQuery datepicker 与 Twitter Bootstrap 不兼容吗?

    我有一个想要在页面上显示的日期选择器 我尝试过 JQ 1 6 4 和 1 7 2 我在 Ubuntu 上使用 v1 2 4 的 playframework 和 Chromium 这是我正在使用的代码 这是我试图向选择器展示的视图 exten
  • CoreDNS仅在kubernetes集群中的一台主机上工作

    我有一个有 3 个节点的 Kubernetes root ops001 kubectl get nodes NAME STATUS ROLES AGE VERSION azshara k8s01 Ready
  • C# - 如何从表架构中获取 MS_Description 字段?

    string SQL SELECT TOP 1 FROM TableName IDataReader reader DatabaseClassCreator ExecSQLReader SQL DataTable schema reader
  • 如何在 WPF 中调整 Canvas 的大小?

    我正在编写一个 WPF 应用程序 它有Canvas在里面 该画布将在运行时自定义渲染 这有点像游戏 需要以像素为单位来衡量 我需要能够设置我的Canvas至 478x478 像素 客户端矩形大小 我不希望在我的设备上进行任何缩放或其他与分辨
  • 如何防止在azure devops yaml中创建新分支的构建

    在 Azure DevOps 中 使用 Yaml 文件创建管道并在触发器部分下提到 开发 它会触发开发分支中的新提交 但也会触发基于 开发 分支的新分支创建 这在我创建静态管道时不会发生 如何防止构建新分支 这里有什么帮助吗 我认为你应该使
  • 如何使用 Facebook 的 API 检查用户是否喜欢我的 Facebook 页面或 URL

    我想我快要疯了 我无法让它工作 我只是想用 javascript 检查用户是否喜欢我的页面iFrame app FB api method pages isFan page id my page id function response c
  • 从代码隐藏中单击按钮刷新更新面板

    我正在使用使用数据源和数据绑定的 Gridview 当我重新加载页面时 网格视图已更新 但我希望它位于按钮单击上 但它对我不起作用 updatepanel内的gridview
  • 将java转换为c#代码的工具[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 目前将 java 转换为 c 的最佳工具是什么 除了 j2c翻译器 j 我现在用的是IKVM 供你参考 Sharpen by db4o XES 远程软件八达通 商业的 注意 我对它们
  • 如何使用 jquery 定位特定字母/单词?

    举个例子 我想应用该类 fancy to 所有出现的情况的标志 amp 在文件中 The CSS fancy font style italic 所以文本看起来像这样 Ben amp Jerry s 将被 jquery 操纵为 Ben sp
  • MATLAB 四舍五入到最接近的整数

    我有一个1x50000尺寸矩阵v我想将其转换为零均值和单位方差 x v mean v std2 v 但 MATLAB 没有给我精确的浮点值 而是将其转换为最接近的整数 请帮助我获得准确的值 检查数据类型 for v 我确信这是一个整数类型
  • 在 python 中获取 windows 版本的更好方法是什么?

    我将编写一个执行 Windows 操作系统版本检查的程序 因为我可以使用 sys windowsversion 0 或返回字符串而不是 int 的平台模块来执行此操作 那么获取 Windows 发行版本的更好方法是什么 您可以通过致电来做到
  • 以编程方式将文本大小设置为 android 中微调器中的文本

    您好 我想以编程方式 动态 设置微调器中文本的样式和大小 我在我的应用程序中没有为此使用任何资源 所以请给我一些建议 我认为您不能在不覆盖默认布局资源的行为的情况下动态创建它 要使用资源创建它 创建一个布局文件 其中包含TextView并为
  • React Native:任务:react-native-maps:compileDebugRenderscript失败

    我正在尝试实现 React NativeMapView对于安卓 我确实关注了github安装指令 但当我尝试使用运行时遇到编译错误react native run android命令 任务 react native maps compile
  • 在 emacs 终端中使用 Ctrl-X 命令?

    当我在 emacs 中运行终端时 使用M x term 我似乎无法使用以C X 比如说C x o切换窗格或C x C c退出 相反 终端本身似乎正在接收这些C x信号 相比之下 C c命令由 emacs 本身接收 我怎样才能改变这种行为 t
  • 火狐浏览器扩展无法工作

    我已经创建了一个 Firefox 扩展 但无法使用它 什么也没有发生 有人知道为什么吗 模块层次结构 我的火狐扩展 chrome manifest 安装 rdf chrome content 语言环境 html 覆盖 js 样本 xul 代
  • 使用 Rails 中的辅助方法向 HAML 标记添加动态属性

    所以我想出了一种方法来做到这一点 但是有没有更简单的方法呢 我想要做的只是在 th 标记之后添加 class 如果 params sort sortBy 我真的需要在辅助方法中包含 HAML 的其余部分吗 这是我的 helper rb 文件
  • Twisted Python:无法写入正在运行的生成进程

    我的问题是 在生成进程后 子进程正在循环以从其标准输入获取数据 我想使用 Echo Process pipes 0 write data 或 Echo Process writeToChild 0 data 向其写入新数据 但两者都不起作用