input - 无法从异步中的标准输入读取文件
问题描述
我编写了一个适用于 asyncio 的代码。在该代码中,我必须使用./check.py < file.txt
我能够从终端提供输入来从标准输入中读取文件。通常它工作正常。但它不适用于从标准输入中读取文件中的数据。
#!/usr/bin/env python3.6
import asyncio
from aioconsole import ainput
async def read_input():
while True:
inp = await ainput()
print('got ' + inp)
if (__name__ == "__main__"):
asyncio.get_event_loop().run_until_complete(read_input())
通常它的工作原理是
$ ./check.py
4
got 4
5
got 5
但是在直接从文件中读取时,我面对这个日志:
$ ./check.py < test/test_case
Traceback (most recent call last):
File "./check.py", line 12, in <module>
asyncio.get_event_loop().run_until_complete(read_input())
File "/usr/lib/python3.6/asyncio/base_events.py", line 468, in run_until_complete
return future.result()
File "./check.py", line 8, in read_input
inp = await ainput()
File "/usr/local/lib/python3.6/dist-packages/aioconsole/stream.py", line 156, in ainput
reader, writer = yield from get_standard_streams(loop=loop)
File "/usr/local/lib/python3.6/dist-packages/aioconsole/stream.py", line 144, in get_standard_streams
cache[key] = yield from connection
File "/usr/local/lib/python3.6/dist-packages/aioconsole/stream.py", line 132, in create_standard_streams
reader, writer = yield from future
File "/usr/local/lib/python3.6/dist-packages/aioconsole/stream.py", line 114, in open_pipe_connection
yield from loop.connect_read_pipe(lambda: protocol, pipe_in)
File "/usr/lib/python3.6/asyncio/base_events.py", line 1099, in connect_read_pipe
transport = self._make_read_pipe_transport(pipe, protocol, waiter)
File "/usr/lib/python3.6/asyncio/unix_events.py", line 185, in _make_read_pipe_transport
return _UnixReadPipeTransport(self, pipe, protocol, waiter, extra)
File "/usr/lib/python3.6/asyncio/unix_events.py", line 353, in __init__
raise ValueError("Pipe transport is for pipes/sockets only.")
ValueError: Pipe transport is for pipes/sockets only.
无法理解为什么它的行为不同?我想像./check.py < file.txt
使用协程一样读取文件。
解决方案
推荐阅读
- php - 如果我想拥有一张伴随着其他图像的图像,我是否需要多个数据库表?
- amazon-web-services - 为什么 IAM“AmazonEC2FullAccess”策略不允许用户启动实例?
- javascript - 如何接受来自 Botkit 听到方法的多个值?
- apache-zookeeper - Zookeeper 中的 upconfig 和 downconfig 是什么?
- python - 无法使用 pip3 安装 eth-testrpc
- java - javax.validation 约束,给某个属性的属性添加违例
- docker - 将链接 docker 容器与网络混合
- python - GeoPandas .to_file 给出了错误的列?
- python - Python Pandas- Groupby 列获取 Pandas 数据框列中的两个峰值
- macros - 用户更改已编译宏中的变量