Python: 如何写入fd 3?
Python: how to write to fd 3?
在 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()
但它从文件系统中的文件创建了一个文件描述符(显然我不能 select 分配哪个文件描述符)并且 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.
您的代码应该可以工作。但是就像运行 C程序一样,你必须先重定向FD 3。
python write.py 3>&1
在对 os.fdopen
的调用中将 "w+"
更改为 "w"
。这就是导致 "not seekable" 错误的原因。 +
告诉它打开它进行读写,这是行不通的。
在 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()
但它从文件系统中的文件创建了一个文件描述符(显然我不能 select 分配哪个文件描述符)并且 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.
您的代码应该可以工作。但是就像运行 C程序一样,你必须先重定向FD 3。
python write.py 3>&1
在对 os.fdopen
的调用中将 "w+"
更改为 "w"
。这就是导致 "not seekable" 错误的原因。 +
告诉它打开它进行读写,这是行不通的。