I am trying to call asyncio.create_subprocess_exec
within a Fastapi background task, but it keeps raising a NotImplementedError
. The run_subprocess function works fine when it is ran outside of Fastapi. I am running this in windows using an asyncio loop, not uvloop.
import asyncio
from fastapi import FastAPI, BackgroundTasks
DHCP_SERVER = "1.1.1.1"
app = FastAPI()
@app.get("/")
async def subprocess_test(background_tasks: BackgroundTasks):
background_tasks.add_task(run_subprocess)
async def run_subprocess():
proc = await asyncio.create_subprocess_exec(
'powershell.exe',
f'Get-Dhcp-Serverv4Scope -ComputerName \"{DHCP_SERVER}\"',
stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await proc.communicate()
if stderr:
print(stderr)
else:
print(stdout)
File ".\subprocess_example.py", line 13 in run_subprocess
proc = await asyncio.create_subprocess_exec(
File "C:\Python\Python38-32\lib\asyncio\subprocess.py", line 236, in create_subprcess_exec
transport, protocol = await loop.subprocess_exec(
File "C:\Python\Python38-32\lib\asyncio\base_events.py", line 1615, in subprocess_exec
transport = await self._make_subprocess_transport(
File "C:\Python\Python38-32\lib\asyncio\base_events.py", line 487, in _make_subprocess_transport
raise NotImplementedError
Can anyone please help fix this?
Thanks!