Python: как написать на фд 3? - PullRequest
0 голосов
/ 01 мая 2020

в 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(3, 'w+') as fdfile:
  File "/usr/lib/python3.8/os.py", line 1023, in fdopen
    return io.open(fd, *args, **kwargs)
io.UnsupportedOperation: File or stream is not seekable.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Измените "w+" на "w" в вызове на os.fdopen. Это то, что вызывает ошибку «не для поиска». + говорит ему открыть его для чтения и записи, что не сработает.

0 голосов
/ 01 мая 2020

Ваш код должен работать. Но, как и при запуске программы C, сначала нужно перенаправить FD 3.

python write.py 3>&1
...