我正在尝试在Windows 7 64位和Python 3.4.3上异步读取stdin
我尝试这样做是受SO的启发:
import asyncio
import sys
def reader():
print('Received:', sys.stdin.readline())
loop = asyncio.get_event_loop()
task = loop.add_reader(sys.stdin.fileno(), reader)
loop.run_forever()
loop.close()
但是,它会引发一个OSError: [WInError 100381] An operation was attempted on something that is not a socket
。
是否可以将类似文件的对象stdin
包装在类中以为其提供套接字的API?我已经单独询问了这个问题,但是如果解决方案很简单,请在此处回答。
假设我无法包装类似文件的对象以使其成为套接字,我尝试使用受此要旨启发的流:
import asyncio
import sys
@asyncio.coroutine
def stdio(loop):
reader = asyncio.StreamReader(loop=loop)
reader_protocol = asyncio.StreamReaderProtocol(reader)
yield from loop.connect_read_pipe(lambda: reader_protocol, sys.stdin)
@asyncio.coroutine
def async_input(loop):
reader = yield from stdio(loop)
line = yield from reader.readline()
return line.decode().replace('\r', '').replace('\n', '')
@asyncio.coroutine
def main(loop):
name = yield from async_input(loop)
print('Hello ', name)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))
loop.close()
这引起了NotImplementedError
在asyncio.base_events._make_read_pipe_transport
请告知如何在Windows上阅读stdin
使用asyncio
…
将NotImplementedError
引发异常,因为连接管协程不被支持SelectorEventLoop
,这是默认的事件循环集asyncio
。您需要使用ProactorEventLoop
Windows支持Windows上的管道。但是,它仍然不起作用,因为在Windows中,connect_read_pipe
andconnect_write_pipe
函数显然不支持Python
3.5.1中的stdin
/ stdout
/stderr
或文件。
一种stdin
使用异步行为进行读取的run_in_executor
方法是将线程与循环的方法一起使用。这是一个简单的示例供参考:
import asyncio
import sys
async def aio_readline(loop):
while True:
line = await loop.run_in_executor(None, sys.stdin.readline)
print('Got line:', line, end='')
loop = asyncio.get_event_loop()
loop.run_until_complete(aio_readline(loop))
loop.close()
在示例中sys.stdin.readline()
,该loop.run_in_executor
方法在另一个线程内调用该函数。线程将保持阻塞状态,直到stdin
收到换行符为止,与此同时,循环可以自由执行其他协程(如果存在)。
问题内容: 我安装了Python 2.7和NumPy。我已经下载了SciPy的预构建二进制文件,但是安装脚本因以下错误而失败: 找不到Blas库。可以在文件(部分)中指定搜索目录的目录,也可以通过设置BLAS环境变量来指定 目录。 我真的对这件事还不了解。我以为这是一个简单的安装过程,但事实并非如此。我用Google搜索了BLAS环境变量,但是找不到任何合适的变量。任何帮助表示赞赏。 麦克风 编辑
在 Windows 上执行命令将返回以下结果: 运行诊断程序会产生以下结果:
我是新来的,我正在学习使用方法等等,我在方法中有我的代码,但在代码中有一个控制台。ReadLine();这是我不想要的。基本上,我需要做的是一个包含10个方法的大作业,作为输入,你必须调用哪个方法,然后调用实际的输入,但是当我的方法中有一个readline时,我必须给出3个,而不是2个。如果有人知道如何帮助noob,我的代码如下 基本上是int.parse(consolereadline);我需要
Invoke-Neo4j:无法确定E:\neo4j处的安装版本 在行:1字符:175 尝试{unblock-file-path'e:\neo4j\bin\neo4j-management*.*'-erroraction'silentlycontinue'>catch<>;import-module null
问题内容: 以下代码在Windows下的node.js中产生异常: 这是消息: 当我删除时,它工作正常。是什么原因造成的?我尝试关闭防火墙,但没有任何效果。 问题答案: node.js使用c-ares解析器,并且完全忽略系统解析器。因此,有关C:\ WINDOWS \ system32 \ drivers \ etc \ hosts的建议可能无关紧要。 c-ares库读取某些系统配置文件-例如,在