Python:如何写入fd 3?

问题描述 投票:0回答:1

在C语言中,我可以这样写入文件描述符3:

$ cat write.c 
#include <unistd.h>

int main(void) {
    write(3, "written in fd 3\n", 16);
}

然后我可以调用程序,将fd 3重定向到fd 1(stdin),如下所示:

$ ./write 3>&1
written in fd 3

如何在python中做到这一点?我检查了os.open(),但是它从文件系统中的文件中创建了文件描述符(显然我无法选择要分配的文件描述符),os.fdopen()从文件描述符中创建了文件对象(由os.open()创建) )。因此,如何选择文件描述符号。

我尝试过:

with os.fdopen(3, 'w+') as fdfile:

但是它给了我:

OSError: [Errno 9] Bad file descriptor

编辑:这是我的python程序:

$ cat fd.py
import os

with os.fdopen(3, 'w+') as fdfile:
    fdfile.write("written to fd 3\n")
    fdfile.close()

这是我运行它时的结果:

$ python fd.py 3>&1
Traceback (most recent call last):
  File "fd.py", line 3, in <module>
    with os.fdopen(4, 'w+') as fdfile:
  File "/usr/lib/python3.8/os.py", line 1023, in fdopen
    return io.open(fd, *args, **kwargs)
OSError: [Errno 9] Bad file descriptor
python c stdout file-descriptor fdopen
1个回答
1
投票

您的代码应该有效。但是就像运行C程序一样,您必须先重定向FD 3。

python write.py 3>&1
© www.soinside.com 2019 - 2024. All rights reserved.