アカウント名:
パスワード:
異常終了時にも後始末をするためには
import atexit ... def cleanup(filename, fd): os.close(fd) os.remove(filename) ... try: fd = os.open(...) atexit.register(cleanup, (filename, fd)) ..
とか書かないとダメ?
try ... finally を使えばいいのでは?http://blog.amedama.jp/entry/2015/10/02/234946 [amedama.jp] とか https://qiita.com/QUANON/items/c5868b6c65f8062f5876 [qiita.com] とか見ると、そうしています。
ここがちょいと面倒なところなのですが、当然のことながら「別プロセスが作成したロックファイルは触らずにLocked例外をraiseしたい」わけですよ。
だもんでfinallyにos.removeを書くとあまり都合がよくないのです。
逃げる手は思い付かないではないですが、is not NoneとかPythonicじゃないのが好かないんですよね。
@cmdef lockfile(filename): fd = None try: fd = os.open(filename, os.O_CREAT | os.O_EXCL) yield fd except OSError as e: if e.errno == errno.EEXIST: raise Locked
別途 try するのは?
@cmdef lockfile(filename): fd = None try: fd = os.open(filename, os.O_CREAT | os.O_EXCL) except OSError as e: if e.errno == errno.EEXIST: raise Locked else: raise try: yield fd finally: os.close(fd)
yield Noneが何の例外をraiseするんだ?とか半年後のボクが頭を抱えそうなのでちょっと。
Pythonicなコードにバグを仕込むよりは。Pythonicでなくてもわかりやすいコードを書いた方がいいだろう、と割り切ることにします。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
やっぱりatexit? (スコア:1)
異常終了時にも後始末をするためには
とか書かないとダメ?
Re: (スコア:2)
try ... finally を使えばいいのでは?
http://blog.amedama.jp/entry/2015/10/02/234946 [amedama.jp] とか https://qiita.com/QUANON/items/c5868b6c65f8062f5876 [qiita.com] とか見ると、そうしています。
svn-init() {
svnadmin create .svnrepo
svn checkout file://$PWD/.svnrepo .
}
Re: (スコア:1)
ここがちょいと面倒なところなのですが、当然のことながら「別プロセスが作成したロックファイルは触らずにLocked例外をraiseしたい」わけですよ。
だもんでfinallyにos.removeを書くとあまり都合がよくないのです。
逃げる手は思い付かないではないですが、is not NoneとかPythonicじゃないのが好かないんですよね。
Re: (スコア:2)
別途 try するのは?
svn-init() {
svnadmin create .svnrepo
svn checkout file://$PWD/.svnrepo .
}
Re:やっぱりatexit? (スコア:1)
yield Noneが何の例外をraiseするんだ?とか半年後のボクが頭を抱えそうなのでちょっと。
Pythonicなコードにバグを仕込むよりは。Pythonicでなくてもわかりやすいコードを書いた方がいいだろう、と割り切ることにします。