- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是,在生成进程后,子进程正在循环以从其标准输入获取数据。我想使用 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
谢谢,
问
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()
关于python - 扭曲的Python : Cannot write to a running spawned process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936181/
对于上下文,routes\index.js:87 在我的 exec 周围(同步)或在我的 exec 内部(异步)。 我在使用库 child_process、win-spawn 或 cross-spaw
我一直在尝试使用 Programming Erlang,版本 2(Joe Armstrong 的书)。我正在尝试解决第 13 章中的第一个问题。 作为解决问题的办法——我想到了这个—— -module
使用rust 0.12。 假设我有一个可发送的闭包,它的定义完全独立于应该在另一个任务中生成它的代码。 关闭类型: type closure_type = ||: 'static + Send; 代码
我相信我在某处读到使用 spawn/1 之间存在差异和 spawn/3谈到热重载,但我找不到有关该主题的任何完整信息。所以我想知道是否真的有区别,如果有,那是什么?一些例子会很棒。谢谢你。 最佳答案
我无法编译这个简单的程序 #include #include #include #include int main(){ printf("Spawning new process...\n")
NetworkObject.spawn()不起作用!我正在为游戏对象使用unity netcode,并尝试通过使用主机实例化它来产生一个游戏对象,然后在客户机上使用getComponent().spa
有没有办法确定所有生成的子进程何时关闭或退出? 例如,我如何确定没有更多进程可以运行,或者换句话说,我的 500 个子进程已全部退出? for (let index = 0; index {
我最近一直在开发一个按需构建服务器。构建服务器是一个 NodeJS/Express REST API,它本质上包装了 Angular CLI 和相关的构建工具,用于完成自定义的按需 Angular 应
我正在尝试使用外部包: npm install [python-shell][1] 现在,我只有基本的 js 文件和包附带的示例: console.log('hey in main.js') var
我正在尝试让 spawn 影响 rm -rf node_modules 后跟 npm install(在 Windows 7 上; nx 个命令由透明安装的 CygWin 提供。所有 nx 个命令都可
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试使用 spawn() 创建子进程有自己的终端 父.js: const spawn = require('child_process').spawn; console.log('started
我正在尝试使用 spawn 运行此命令 var args = ['-ss','00:00:15','-i',storage_path + doc.file_name,'-vframes','1','-
我开始使用 Erlang,在应用从 spawn/3 返回的 PID 时,可以帮助理解不同的结果。到process_info/1方法。 给定这个简单的代码,其中 a/0函数被导出,它只是调用 b/0 ,
我正在尝试运行一个非常简单的 tcl 脚本 package require Expect spawn sftp user@host 我得到的错误是 The system cannot find the
我使用 npm 全局安装了 phantomJs。为什么此代码不起作用? var page = require('webpage').create(); var spawn = require('ch
当我决定自学编程时,我从 Java 开始。尽管我熟悉编写简单的程序化软件(主要是用 PHP),但我最近开始意识到,对于更复杂的操作,我依赖对象。 我的第一个 Java 游戏通过实例化对象以随机速度在随
Julia 的run 函数似乎难以运行source。奇怪的是,如果我在 shell 中运行完全相同的命令,它不会有问题。 有没有办法从 Julia 以编程方式运行命令? julia> cmd = "/
当我运行 grunt-open 时,我不断收到“警告:Spawn ENOENT”问题。 我的设置 我的所有项目文件都在 Google 云端硬盘上。我正在直接对文件进行开发(使用 Google 云端硬盘
当我使用 100 个传感器运行时,我收到了 Erlang 的响应,所有进程都返回某个版本的 进程 中出现错误,退出值:{undef,[{main,watcher_start,[10,0],[]}]}
我是一名优秀的程序员,十分优秀!