Windowsでは下記のようなソースコードでエラーをファイルに出力してくれますが、Raspberry Piで実行したときは真っ白なままです。
(どちらでも同じコードを使用)
Raspberry Piでは扱うことができないのでしょうか?
import os import sys FILE = os.path.dirname(sys.argv[0]) + "/" + "__error__.csv" sys.stderr = open(FILE, "a") class Test: def __init__(self): print("__init__") def func(self): print("1") prrrint("test") # 関数名を間違えている。この例の場合はここのエラーを知りたい print("2") t = Test() t.func()
「真っ白なままです。」
とはどういうことでしょうか。
ファイルは出来ているが中身なしということでしょうか?
今RasPiが手元にないので検証できませんが、RasPiというよりもOSの違いかなと
FILE = os.path.dirname(sys.argv[0]) + "/" + "__error__.csv"
が怪しそうなので試しに
FILE = "./__error__.csv"
とかで直下で試してはいかがでしょうか
> 「真っ白なままです。」とはどういうことでしょうか。
> ファイルは出来ているが中身なしということでしょうか?
そうです。
> 直下で試してはいかがでしょうか
やはり中身なしでした・・・。
ごめんなさい私にはこれ以上分からないです。
OSが違うので入出力周りは仕様が違うのかも知れません。
リダイレクション等で対応する方が無難かなと思います。
sys.argv[0] を使われているため、どういう実行のしかたをされているかが必要です。
コマンドラインでの実行形式、実行をしたディレクトリを教えてください。
そもそもsys.argv[0] を使う理由は何でしょうか?普通に実行すると、os.path.dirname(sys.argv[0])は""になってしまいます。
> コマンドラインでの実行形式、実行をしたディレクトリを教えてください。
IDLE(エディタ)で開いて Run > Run Module で実行しています。
ターミナルで
cd desktop
sudo python3 main.py ← sudo がないとパーミッションエラーが出る
としてもCSVファイルは空です。
> そもそもsys.argv[0] を使う理由は何でしょうか?
ファイルの位置を後から変更する可能性もあるので出力場所を固定にしたくなかったからです。
>普通に実行すると、os.path.dirname(sys.argv[0])は""になってしまいます。
print()でパスの確認をしましたが、""にはなりませんでした。
デスクトップで実行したため、"/home/pi/デスクトップ"が入っていました。
sys.argv[0]はスクリプトの名前になるのではないでしょうか。
https://docs.python.org/ja/3/library/sys.html?highlight=sys%20setprofile
ご提示のコードは、意図どおりですか。
また、Python3の正確なバージョンを質問文中に追記してください。
手持ちの(古い)Raspbian OSの古いPython3で一部修正したコードで試したところopen()のところでエラーになりました。(軽く動作させただけで追ってませんが)
> pi@raspberrypi ~ $ python3 main2.py /home/pi
File "main2.py", line 8
sys.stderr = open(FILE, "a")
^
SyntaxError: invalid syntax
pi@raspberrypi ~ $ python3 --version
Python 3.2.3
$ python3 --version
Python 3.5.3
私のコメント、
> open()のところでエラーになりました。
については、私の方の誤りでした。失礼しました。問題が再現しないので試したことの情報共有がほとんどですが、回答を投稿しました。ご覧ください。
回答2件
あなたの回答
tips
プレビュー