gpt4 book ai didi

python3 : fileno() throwing I/O operation on closed file error

转载 作者:行者123 更新时间:2023-11-30 22:05:29 24 4
gpt4 key购买 nike

我正在编写一个后台应用程序,其中 stdin、stdout 和 stderr 将从文件重定向到文件。我的代码如下:

#! /usr/bin/python3

import sys
import os

# Custom I/O files
myStdin = './stdin'
myStdout = './stdout'
myStderr = './stderr'

# Create empty files to be used by child to redirect I/O
open(myStdin, 'a').close()
open(myStdout, 'a').close()
open(myStderr, 'a').close()

# Close standard file descriptors before spawnning child
sys.stdout.flush()
sys.stderr.flush()
sys.stdin.close()
sys.stdout.close()
#sys.stderr.close()

# spawn child and parent exits gracefully
p = os.fork()
if p:
sys.exit(0)

# open files to redirect I/O (Non-buffered)
si = open(myStdin, 'r')
so = open(myStdout, 'ab+', 0)
se = open(myStderr, 'ab+', 0)

print(si.fileno())

# Duplicate the file descriptors
os.dup2(si.fileno(), 0)
os.dup2(so.fileno(), 1)
#os.dup2(se.fileno(), 2)

# Update the standard file objects with custom once
sys.stdin = si
sys.stdout = so
#sys.stderr = se

但是,我收到如下错误:

 Traceback (most recent call last):
File "./test.py", line 33, in <module>
print(si.fileno())
ValueError: I/O operation on closed file.

出了什么问题,为什么打开的文件提示已关闭?

最佳答案

您已经通过以下方式关闭了标准输出:

sys.stdout.close()

因此,下次您尝试打印任何内容(默认情况下为标准输出)时,您将收到ValueError:I/O操作已关闭文件。异常。所以不,它与访问 sifileno() 方法没有任何关系。

关于python3 : fileno() throwing I/O operation on closed file error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53002601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com