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



我正在使用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(我认为这是使用此模块的要求(。

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

os.close(fd( close file descriptor fd.

注意:此函数适用于低级别 I/O,必须应用 到由 os.open(( 或 pipe(( 返回的文件描述符。要关闭 "File object" 由内置函数 open(( 或 popen(( 返回 或 fdopen((,使用其 close(( 方法。

尝试在subprocess.Popen中设置close_fds=True

subprocess.Popen(
# ...
close_fds=True,
)

相关内容

  • 没有找到相关文章

最新更新