关闭通过pty.openpty()创建的伪tty

2024-09-27 07:35:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pty.openpty()来愚弄一个子流程,该子流程基于isatty()改变其行为,大致如下所示:

import pty
import subprocess

master, slave = pty.openpty()
with subprocess.Popen(cmd, stdin=slave) as process:
    stdout, stderr = process.communicate()

但是,在多次这样做(作为自动化测试的一部分)之后,我得到:

E           OSError: [Errno 24] Too many open files

../../miniconda/envs/aclimatise-test/lib/python3.7/subprocess.py:1393: OSError

E       OSError: out of pty devices
../../miniconda/envs/aclimatise-test/lib/python3.7/pty.py:59: OSError

出于某种原因,pty模块文档没有告诉我如何或何时关闭正在分配的伪tty。我应该如何以及何时这样做?还是我使用pty的方式完全错误

如果有帮助的话,我使用的是Python 3.6+,使用的是Linux(我认为这是使用此模块的一个必要条件)


Tags: 模块pytestimportlib流程processslave
1条回答
网友
1楼 · 发布于 2024-09-27 07:35:36

您可以使用os.close关闭主控和从控

os.close(fd) Close file descriptor fd.

Note This function is intended for low-level I/O and must be applied to a file descriptor as returned by os.open() or pipe(). To close a “file object” returned by the built-in function open() or by popen() or fdopen(), use its close() method.

相关问题 更多 >

    热门问题