質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%

Q&A

解決済

1回答

519閲覧

ValueError: I/O operation on closed fileの解消方法について

westbom

総合スコア7

1グッド

0クリップ

投稿2024/09/06 10:17

今pythonでシステム開発をしています。
一番最初に呼ばれるファイルに以下の記述をしています。

python

1app.py 2# -*- coding: utf-8 -*- 3import sys 4import io 5sys.path.insert(0, '/var/www/test') 6sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8') 7

上記の記載をし、実行すると下記のエラーが発生してしまいます。

File "/var/www/test/app.py", line 5
ValueError: I/O operation on closed file, referer: http://localhost/

pythonは3.9を使ってます。
記述方法に間違いがありますでしょうか?

わかる方、教えてください。

melian👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toge_

2024/09/06 10:29

2点質問させてください。 app.pyはどういう風に実行していますか? python app.py の様に実行しているんでしょうか? あと、ソースコードの1行目に「app.py」とありますが、これはソースコードには書いていませんよね?
melian

2024/09/06 10:40

標準入力をクローズした状態で実行すると同じエラーメッセージが表示されます。推測になりますが、デーモンプロセスから子プロセスとして実行されているのではないでしょうか。 >>> import sys >>> import io >>> sys.stdin.close() >>> sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: I/O operation on closed file
westbom

2024/09/06 11:09

app.pyはlimuxサーバ上で実行されます。 mod_wsgiを使用して、アクセスがあったらapp.pyが起動するような設定になってます。
westbom

2024/09/06 11:10

>デーモンプロセスから子プロセスとして実行されているのではないでしょうか。 すみません。これの意味がわかってないです。 どこを確認したらわかるでしょうか?
melian

2024/09/06 11:28 編集

> どこを確認したらわかるでしょうか? > mod_wsgiを使用して、アクセスがあったらapp.pyが起動するような設定 はい、まさにその様な状況(mod_wsgi から python プログラムを実行)であることが判りました。 以下は mod_wsgi のドキュメントからの引用ですが、標準入力(sys.stdin)へのアクセスが制限されているそうです。 WSGIRestrictStdin — mod_wsgi 5.0.0 documentation https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIRestrictStdin.html > In the interests of promoting portability of WSGI applications, mod_wsgi restricts access to sys.stdin and will raise an exception if an attempt is made to use sys.stdin explicitly.
westbom

2024/09/06 11:28

なるほど。そういうことなんですね。 このような場合、対策はできないのでしょうか?
westbom

2024/09/06 11:50

ありがとうございます。 このエラーは解消しました。
guest

回答1

0

自己解決

wsgi.confファイルに「WSGIRestrictStdin Off」の記述を追記することでエラーを解消できました。

投稿2024/09/06 11:51

westbom

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問