python - 尝试异步调用 shell 命令时 Python 错误引发 NotImplementedError
问题描述
我是 Python 编程新手。我想并行调用一些 shell 命令,并将它们的结果累积在一个数组中,就像 javascriptpromise.all()
方法一样。
我在 Python 中有以下代码
import asyncio
import os
commands = [
'netstat -n | findstr 55601',
'dir | findstr portMonitoring.py',
'ssh 10.6.100.192 netstat'
]
async def job(cmd):
# await asyncio.sleep(1)
# return "HEE"
# return os.popen(cmd).read()
process = await asyncio.create_subprocess_exec(
cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
return await process.communicate()
async def main():
jobs = [job(cmd) for cmd in commands]
done, pending = await asyncio.wait(jobs, return_when=asyncio.FIRST_COMPLETED)
folders = []
[folders.append(d.result()) for d in done]
print("RESULT:", folders)
asyncio.run(main())
我收到以下错误,无法找到任何解决方案,请协助谢谢。
Traceback (most recent call last):
File "test.py", line 16, in job
cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
File "C:\DEV\Python3.7.4\lib\asyncio\subprocess.py", line 217, in create_subprocess_exec
stderr=stderr, **kwds)
File "C:\DEV\Python3.7.4\lib\asyncio\base_events.py", line 1529, in subprocess_exec
bufsize, **kwargs)
File "C:\DEV\Python3.7.4\lib\asyncio\base_events.py", line 458, in _make_subprocess_transport
raise NotImplementedError
NotImplementedError
解决方案
https://github.com/python/cpython/blob/master/Lib/asyncio/base_events.py#L493
这是一项计划中的功能,但尚未实施。它将在未来工作,但当前版本不支持它。
我查看了其他分支,但没有一个实现。subprocess 模块 ( https://docs.python.org/3/library/subprocess.html ) 广为人知asyncio
,对它的支持尚未完成。端点已定义,但它们现在不可用。
推荐阅读
- python - Pandas:根据模式自动生成增量 ID
- asynchronous - 我如何获得成功插入学生的成功计数?
- javascript - 如何正确解析日期字符串
- asp.net-core - 在 .NET 中配置后如何访问 AWS 密钥?
- postgresql - 摄取完成后的 citus 写入活动
- oracle - 尝试确定异步作业何时完成:调用 Oracle 的 dbms_job.submit
- nginx - 多个服务的 NGINX 配置覆盖一个配置的 add_header
- swift - 自定义 UIBarButtonItem 不适用于外观
- java - 使用基准测试时的 Optaplanner OptaPlannerXmlSerializationException
- spring-webflux - WebClient - 如何忽略特定的 HTTP 错误