1 回答
TA贡献2065条经验 获得超13个赞
问题不是来自此代码中的问题是 tempfile.mkstemp()
实际上打开了该文件:create_subprocess_exec
mkstemp() 返回一个元组,其中包含一个打开文件的操作系统级句柄(由 os.open()返回) ...
我以为它只会创建文件。为了解决我的问题,我只是在 中添加了一个调用。这消除了错误,但有点奇怪(打开文件两次)。所以我把它改写为:os.close(handle)
import aiofiles
import tempfile
import uuid
async def main():
await asyncio.gather(*[fds_test(i) for i in range(10)])
async def fds_test(index):
dir_name = tempfile.gettempdir()
file_id = f"{tempfile.gettempprefix()}{uuid.uuid4()}"
temp_filename = f"{dir_name}/{file_id}.dat"
async with aiofiles.open(temp_filename, mode='w') as fp:
await fp.write('stuff')
bash_cmd = 'cat {}'.format(temp_filename)
process = await asyncio.create_subprocess_exec(*bash_cmd.split(), close_fds=True)
await process.wait()
if __name__ == "__main__":
import asyncio
asyncio.run(main())
现在我想知道为什么错误是由而不是引起的,也许是因为它子进程打开了更多的文件,以至于它不太可能使临时文件创建成为打破限制的原因......subprocesstempfile.mkstemp
添加回答
举报