くだすれPython(超初心者用) その39

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/08/24(金) 07:50:35.97ID:VD4/++xS
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その38
https://mevius.5ch.net/test/read.cgi/tech/1526522954/
122デフォルトの名無しさん
垢版 |
2018/09/06(木) 21:46:28.09ID:r2CzgwVn
>>118
真面目に添削すると

数字意外を入力した場合に「不正な値です」と表示する
→数字でないならそもそも値ではないやんか、何言っとんやわれ?なめとんか?
「不正な入力です」と表示する
→不正というワードは否定形なのでわかりにくい
「間違った入力です」と表示する
→何が間違っているのかわからない
「数字以外の入力です」と表示する
→だからどうすれば良いのかわかりにくい
「数字を入力してください」と表示する
→漢数字でもええんか?
「答えになる数値を入力を入力してください」と表示する
→めっちゃわかりやすいやん!
123デフォルトの名無しさん
垢版 |
2018/09/06(木) 21:56:28.45ID:bpm1lb7O
>>118
assert使うといいよ
2018/09/07(金) 00:32:30.89ID:hV93LKBw
>>121
すみません。テンプレ読み直します。
>>122
ありがとうございます。何気にすごく重要なことを教えてもらった気がする。
>>123
試してみます。
125デフォルトの名無しさん
垢版 |
2018/09/07(金) 16:30:33.98ID:DKf48tK4
>>122
イイネ!(・∀・)ワロタヨ!
126デフォルトの名無しさん
垢版 |
2018/09/07(金) 17:07:52.42ID:82uhpEUK
>>118
valueはstrだから、たとけ入力されたのが"123"とかの数'字'であってもtypeはstrになる
つまり、自分で明示的に型変換をしない限り何を入力してもtype(value)==intが成り立つ事はない

入力を受け取ったらまず最初にvalueをintに型変換したら?
int(value)でできるし、変換できない文字列が入って来たらエラーになるので例外処理で不正な入力も検知できるよ
127デフォルトの名無しさん
垢版 |
2018/09/07(金) 17:26:59.78ID:po/zaTpZ
たとけ
128デフォルトの名無しさん
垢版 |
2018/09/07(金) 18:10:30.75ID:DKf48tK4
たとけ
2018/09/07(金) 18:16:00.07ID:QgSvA/nW
とたけけ
130デフォルトの名無しさん
垢版 |
2018/09/07(金) 20:30:20.91ID:DKf48tK4
とたけけけ
2018/09/08(土) 02:42:10.64ID:zJ7GwxeF
import dataset

db = dataset.connect('sqlite:///zoo.db')
table = db['zoo']

results = table.find(damages = '大けが')

# for record in results:
# print(record)

if results == None:
print('無いです')
else:
print('ありました')
print(results)


カラムの 『damages』 が 『大けが』 のレコードがあるか無いか知りたいんですが、当たり前だけどこれだとダメでした。どうやってあるかないかを調べたらいいんでしょうか?
2018/09/08(土) 03:07:51.29ID:zJ7GwxeF
自己レスです。
これで出来たっぽいけど他にもっといいやり方ありますか?


import dataset

db = dataset.connect('sqlite:///zoo.db')
table = db['zoo']

results = list(table.find(damages = '大けが'))

# for record in results:
# print(record)

if results == []:
print('無いです')
else:
print('ありました')
print(results)
2018/09/08(土) 07:56:53.17ID:aeU58kvm
>>126
丁寧にありがとうございます。
なるほど…例外処理でやってみます。
2018/09/08(土) 08:21:40.63ID:BJl7Ln5g
こんにちは。
pycharm という便利なものがあるとのことでさっそく使ってみました。
最新版の"PyCharm Community Edition 2018.2.3"をWindows 10 にインストールし、
プロジェクトの設定の"Existing interpreter"に、普段使用している cygwin64 の "python3.6m.exe"を
指定しました。IDEからRunすると問題なく実行されるのですが、ブレークポイントを設定して
Debugを実行すると、

pydev debugger: warning: trying to add breakpoint to file that does not exist: /cygdrive/c/pycharm_doc/test001/c:/pycharm_doc/test001/main.py (will have no effect)
という、ファイルが存在しないというエラーが出来ます。
cygwinのパスの表現と、windowsのパスの表現が合体した変なパス名が表示されます。
3台のPCで試したのですが、全部同じ結果でした。解決する方法はありますかねぇ。
(こちらの都合でcygwin環境が必須になっています)
2018/09/08(土) 08:54:48.94ID:LzkjeqyB
>/cygdrive/c/pycharm_doc/test001/c:/pycharm_doc/test001/main.py

Windows10・WSL で、Linux(Ubuntu)側から、Windowsのフォルダへアクセスしたような感じかね?

/mnt/c/Users/Owner/Documents

Ubuntu側から、WindowsのDocumentsフォルダへアクセス
2018/09/08(土) 09:21:46.04ID:r9+/L/Cg
>>132
試さずに書くけど、元のコードのfindをfind_oneに変えるか、
元のコードの条件文をif len(results) > 0:に変えれば動くんじゃない?
2018/09/08(土) 10:40:12.37ID:BJl7Ln5g
>>135
ありがとうございます。
もしかしたら、リモート(ssh)で接続するのが正解か?と思い始めました。
どうでしょうか。
2018/09/08(土) 12:03:41.47ID:TO1NWAp1
変数名つける時って何語くらいまででつけますか?
詳しく説明すると長くなるし、短いとかぶるし、省略とか頭文字みたいなのは良くないらしいですが
参考文献とかあったら教えてほしいです。
2018/09/08(土) 12:43:49.56ID:cbJtO1ny
リーダブルコードでも読んでこい
140デフォルトの名無しさん
垢版 |
2018/09/08(土) 21:24:47.08ID:JF6Ma/9C
標準ライブラリとかメジャーなフレームワークコードのコード読んで好きなの選べばいいじゃん
141デフォルトの名無しさん
垢版 |
2018/09/08(土) 23:13:29.87ID:fPoBP/2C
>>138
頭文字で名付けても手にとるように意味がわかるコードが良いコードやね
142デフォルトの名無しさん
垢版 |
2018/09/09(日) 11:20:55.79ID:kzlGF2pO
ジェーン台風のJって台風10号だってすぐ判るネーミングやね
2018/09/09(日) 16:08:53.74ID:pN0oDaL+
rssを表示したいんだけど、行末が『ます。』のものだけを表示することにしてます。もし、1行も『ます。』がなくて表示すべきものが全く無かった場合はforループの後に別の処理をしたいんだけど、やり方教えてほしいです。

for e in entri:
title = e['title']
title = title.split(" - ")[0]
summary = e['summary']
summaryList = summary.split("分")
dateTime = f'{summaryList[0]}分'
chuihou = summaryList[1]
if title[:6] != '[ PR ]':
if summa[-3:] == 'ます。':
print(f'{title} {dateTime}')
print(chuihou)
144デフォルトの名無しさん
垢版 |
2018/09/09(日) 16:26:44.95ID:XnExmf42
5chは連続する半角スペースを消してしまうから
インデントが崩れる

(インデント崩さず)ソース貼れるサイト
https://pastebin.com/ ペーストビン
https://ja.osdn.net/pastebin/ OSDNコピペ ログインしないで投稿すると一週間で自動削除
2018/09/09(日) 16:33:13.24ID:pN0oDaL+
どうもすみません
以下のコードです
https://pastebin.com/PCvvn322
2018/09/09(日) 17:06:15.73ID:0ym3cmgA
counter = false

ループ処理 { 1件でも処理したら、counterをtrue にする }

もし、counterがfalseのままなら{ 処理 }
2018/09/09(日) 17:17:25.83ID:pN0oDaL+
>>146
どうもありがとうございます
うまくいきました。
2018/09/09(日) 23:08:48.04ID:pN0oDaL+
forループの続きなんですが、「to」が「imanoJikan」よりも先の項目が見つかったら直近のひとつだけ取得してループを終了させる方法おしえてほしいです

https://pastebin.com/hUp7pyTB
2018/09/09(日) 23:26:11.91ID:sFuHefah
printの下に同じインデントで
break
2018/09/09(日) 23:29:15.01ID:pN0oDaL+
>>149
おおお!
ありがとうございます
2018/09/10(月) 00:27:49.39ID:8UsAQXCT
えぇ…
152デフォルトの名無しさん
垢版 |
2018/09/10(月) 08:53:06.79ID:iZVjiAgO
python卒業します
これからはjsと戯れます
153デフォルトの名無しさん
垢版 |
2018/09/10(月) 08:54:23.89ID:iZVjiAgO
さようならみんな
sys.exit()
2018/09/10(月) 09:37:57.70ID:SBVp+ZlE
達者で
155デフォルトの名無しさん
垢版 |
2018/09/10(月) 13:25:23.61ID:nF+UxiuD
>>152
え!え?
そこは、普通 jsではなく
juliaだろ?

println("Hello julia")
女子小学生より31歳のお姉さまだろ、普通
https://i.imgur.com/mFtwafs.jpg
2018/09/10(月) 18:29:25.45ID:C7zSAi11
subprocessで実行したコマンドの出力の最後の1行と終了ステータスを取得する方法教えてください!
2018/09/10(月) 20:00:58.83ID:7UcGX0Ag
>>155
整形サイボーグっぽいですね
普通の人間がいいです
158デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:04:57.98ID:ZkfvzKVs
>>156
subprocess.run()でコマンドの出力と終了ステータスを取得できる
https://docs.python.jp/3/library/subprocess.html

最後の1行は改行文字でsplitして一番最後を取れば良い
159デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:08:23.29ID:t8KSuPE1
>>156
サブプロセスは最後に終了ステータスを吐くように記述しておく

pipeをつくる
終わる前にpipeから出力を全部とってきて
最後の2行(最後の1行+終了ステータス)以外はポイする
2018/09/10(月) 20:09:03.35ID:t8KSuPE1
>>158
ケコ━━━━(・∀・)人(・∀・)━━━━ン
2018/09/10(月) 23:14:11.21ID:068EZbdc
python 3.6.3 最新のpandas

数値で条件指定してquery()したいのですが、ここからどうしたらいいか分かりません。

北海道や東京等が邪魔で、比較が出来ないと怒られます。出来れば都道府県は消さずに、このまま条件指定したいです
良い方法ありますか?

.csvファイルからデータを読み込んでます
表示させると、こんな感じになります。index3以下は数値で埋まってます
https://i.imgur.com/bll8NE3.jpg
2018/09/10(月) 23:21:28.90ID:zuFyRahU
df.drop(df.index[0])
2018/09/11(火) 07:33:52.50ID:0W5Zv88y
>>162
そうすると、消えちゃうと思います
消さないように条件指定したいです
2018/09/11(火) 08:19:03.98ID:bezMNa3/
そうか
なら死ぬまでやってな
2018/09/11(火) 09:27:36.32ID:0W5Zv88y
csvから数値を取り出してるのに、str型とint型は比較できないとか言われる…

conditions = '(身長 > 160) & (体重 < 60)'
df.query(conditions)

文法は合ってますよね?
>>161
2018/09/11(火) 09:52:26.79ID:Y91dzGGO
>>165
>>165
すみません、df.drop(df.index[0])はしてます
2018/09/11(火) 12:07:19.86ID:0Qtu/zKE
>>165
まちがってる希ガス
168デフォルトの名無しさん
垢版 |
2018/09/11(火) 13:17:25.77ID:tPkMAepR
パイソンやる気が起きないんですがどうしたらいいですか
2018/09/11(火) 13:27:48.27ID:dcNBqXet
queryってラベル日本語okだっけ?
2018/09/11(火) 13:34:14.95ID:dcNBqXet
あと
(体重 < 60)
queryってこのカッコっているんだっけ?
2018/09/11(火) 14:29:20.23ID:MIcxujEr
>>167
ほんとですか…帰ったら見てみます

>>169 >>170
Shift jisでエンコードしてて、printfしたら普通に見られたのと、エラーも吐かなかったので大丈夫かとおもいます
()は参考サイト通りにやりました。()取ってもダメでした
2018/09/11(火) 14:43:17.34ID:SPzv7yKx
プログラミングしたことない文系大学生なんですが、python始めるなら
pythonスタートブック増補改訂版
っていうのでいいですか?
173デフォルトの名無しさん
垢版 |
2018/09/11(火) 14:46:13.07ID:pwo3DQbp
無理
2018/09/11(火) 15:35:17.46ID:MIcxujEr
>>171
dropでindex[0]を消して、一旦保存し、また開き直して、抽出したら出来ました
スレ汚しすみませんでした…
でも、すごく無駄なことをしてる気がする…

原因として、index[0]にある文字列のせいで、下の数値も文字列として認識しちゃってた可能性が浮かびました
だから、開き直したらエラーも出ずに出来たんだと思います
ちなみに、reset_index も意味無かったです
2018/09/11(火) 16:45:24.82ID:SPzv7yKx
>>173
昨日
print("〜〜") っていうの覚えたレベルなのですが、無理なのですか?
2018/09/11(火) 18:16:29.60ID:YvR5RO13
生きるのにも向いてねえよ
はよ死ね
2018/09/11(火) 18:25:17.89ID:p1uFk9aE
みんなのPython 第4版、2017

みんなのが定番だけど、言語の初心者には良いけど、
プログラミング自体の初心者には、どうだろう?

たのしいRuby 第5版、2016

プログラミング自体の初心者は、Rubyでプログラミングを覚えてから、
Python の方が良さそう

他には、Progate などの教育サイトもある
2018/09/11(火) 18:55:41.75ID:0Qtu/zKE
>>168
まず、PyのアイコンをA4サイズに拡大プリントします
2018/09/11(火) 19:19:03.51ID:AZXlXK10
pipでインストールしたライブラリに不備が見つかったので変更を加えたのですが実動作に反映されません。

キャッシュの削除も試してみたのですが変わらず・・・
2018/09/11(火) 19:19:31.34ID:cR5Dh89A
>>158
>>159
どうもありがとうございます。
返事遅くなってすみません。
ドキュメントが難しくて理解出来なくて。

最後の1行をとり出すとして、
subprocess.run(コマンド)
stdout.sprit("\n")[-1]

これだと、NameError: name 'stdout' is not definedってなってしまいます。
2018/09/11(火) 19:26:50.17ID:cR5Dh89A
>>180
aaa = subprocess.run(コマンド, stdout=subprocess.PIPE)
bbb = aaa.stdout.read()
ccc = bbb.split("/")[-1]
print(ccc)

こうやると
AttributeError: 'bytes' object has no attribute 'read'
このエラーでした
2018/09/11(火) 19:43:31.84ID:cR5Dh89A
subprocess.run(["ls", "-l"], stdout=subprocess.PIPE)
print(subprocess.PIPE)

-1がプリントされるんですが、-1とはなんですか?
2018/09/11(火) 19:54:36.58ID:cR5Dh89A
何度もすみません。

>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')

ドキュメントにこう書かれてあるので、CompletedProcessというリストが作られるのかと思い、
subprocess.run(["ls", "-l"], stdout=subprocess.PIPE)
print(CompletedProcess[-1])

とやってみたけど、
NameError: name 'CompletedProcess' is not defined
となりました。
2018/09/11(火) 20:13:26.71ID:cR5Dh89A
自己レス
引数に『universal_newlines=True」を追加したら大丈夫みたいでした。
2018/09/11(火) 21:54:28.05ID:LBODaWXG
>>172
それで良いと思うよ、ガンガレ
2018/09/11(火) 22:09:09.67ID:SPzv7yKx
>>176
ひどくないですか?流石に

>>177
ありがとうございます
progateというのは知り合いからオススメされてました
見てみます
2018/09/11(火) 22:09:33.55ID:SPzv7yKx
>>185
あざす
2018/09/11(火) 22:15:10.44ID:LBODaWXG
>>184
解決したならいいけど
import subprocess
a = subprocess.run(["ls","-l"], stdout=subprocess.PIPE)
print(a)
print(a.args)
print(a.args[-1])
print(a.stdout.decode())#universal_newlinesつけるならいらない
print(a.stdout)
189177
垢版 |
2018/09/11(火) 23:32:02.26ID:p1uFk9aE
Python には、多くの多言語の著者も、参入してる

クジラ飛行机・大津真、
弾幕系のシューティングゲームプログラミングで有名な、松浦 健一郎・司 ゆき

猿向きなのは、掌田津耶乃・高橋麻奈

「スッキリ」「猫でもわかる」は、まだ参入していない
190デフォルトの名無しさん
垢版 |
2018/09/11(火) 23:57:02.57ID:UiecLNUs
みんなの〜がいいのか

Pythonチュートリアル買っちゃった
2018/09/12(水) 00:04:21.73ID:Qysc30q7
>>188
どうもありがとうございます
decode()でも取り出せました。
universal_newlinesつけるのと、decode()とで、中の処理はなにが違うんでしょうか?
2018/09/12(水) 00:39:20.04ID:NOD5QCpZ
>>980
次スレ立てるときはテンプレに下記文言の追加よろしく。

本スレでRuby本を薦めたりRubyコードを貼ることを禁止します
193177
垢版 |
2018/09/12(水) 00:40:25.77ID:pVbQPMMe
Guido の「Pythonチュートリアル」は、ほとんど内容が無いw

詳細は何々を参照してください、ばっかりw
194デフォルトの名無しさん
垢版 |
2018/09/12(水) 00:59:48.52ID:2r/3byF9
Pythonで以下のようなことは私のような超初心者でも可能でしょうか?
当方VBAとJavaをちょっと(API未経験)な程度のスキルしかありません

1 テキストファイルに書かれたアドレスのページを順番に保存
2 特定のページを開きその先にあるリンクを定期的に保存
例えば定期的に気象庁の地震速報一覧のページをまず読み、
https://www.jma.go.jp/jp/quake/quake_sindo_index.html
こちらにある地震の揺れ日時リンクのリンク先
例:https://www.jma.go.jp/jp/quake/20180911100918353-11190739.html
などを全て保存したいです
今は手動で保存しています
2018/09/12(水) 01:06:18.26ID:m5YCt3ez
matplotlibで波形を出力したいのですが
a = [1,2,3,4,5,6,…,16,17,18,19,20]という配列があった時に
偶数値から奇数値の間の線を赤,奇数値から偶数値の線を青
というように条件付で一部色を変えながらplotすることはできるのでしょうか?
2018/09/12(水) 01:32:48.47ID:2r/3byF9
>>194です
保存方法はテキストだけの形式と画像含めたmimeフォーマットでできないでしょうか?
情報後出しで申し訳ないです
2018/09/12(水) 02:21:34.30ID:Fp0BM1OM
>>196
取り敢えずPython スクレイピング で検索してみて
試してみたら?
一回なら1requestとbeautifulsoupが情報が多い
定期ならScrapyが良いのかな?
2018/09/12(水) 02:26:40.00ID:pVbQPMMe
簡単なクローラーは、wget

他には、Ruby のMechanize とか

もっと複雑な、JavaScript でページを作っているような動的なページは、
Ruby でSelenium WebDriver で、ブラウザを操作する
199デフォルトの名無しさん
垢版 |
2018/09/12(水) 06:29:26.14ID:niWPqMtZ
>>189
まだJuliaには参入してない。
2018/09/12(水) 07:04:54.42ID:9GMFh4Pp
今年はJuliaとかDartとか
もう終わりかかってるような奴の復活宣言が多い
2018/09/12(水) 13:04:47.85ID:wa3fqHL8
pandasのデータフレームdfに対して次の処理をします
cols=[a,b,c,d]
dfx = df[cols].head(10).astype(str)

処理すべきデータフレームが複数あるとき
dfa,dfb,dfc...
dfxa,dfxb,dfxc...
としたいのですが、ループで処理を使い回すことはできますか?
dfxa=dfxb=dfxc=None
for i,j in zip([dfa,dfb...],[dfxa,dfxb..]):
__j =i[cols].head(10).astype(str)
はダメでした
※あと↑ループ内ではNoneな変数にそれぞれ値が代入されるのに、ループ後にprintするとNoneとなる理由もわかりません
2018/09/12(水) 20:43:31.59ID:krza25ay
それよりも基礎やれよ
関数も分からんのだろお前
2018/09/12(水) 21:26:10.04ID:T/3USJ28
スペック
プログラム未経験JK
退屈なことはPythonにやらせようを買ったけど難しくて入門Python3を買った
退屈なことよりも分かりやすいけどやっぱり難しい
スタートブックにしたらよかったぜ
204デフォルトの名無しさん
垢版 |
2018/09/12(水) 21:38:01.53ID:pVbQPMMe
>>194-198
「wget 入門」で検索!

-i ファイル 指定したファイルに記載された、URLをダウンロードします。
-r 再帰的にダウンロードします。ページ内のリンクをたどってダウンロードします。

-l 数 --level=数 指定した階層分リンクをたどる。
「-r」オプションのデフォルトは「-l 5」なので「-l1」を指定する。
これで特定のページの、リンク先のページだけをダウンロード(DL)する

-A -R で、DLするファイルの拡張子を指定する。
--spider ファイルをダウンロードせず、URLの存在だけチェックする。
-H, --span-hosts 再帰中に他のドメインも、ダウンロード対象にする

-k, --convert-links HTML や CSS 中のリンクを、ローカルを指すように変更する。
ローカルPC 内だけで動くように、リンクを相対パスに変換する
2018/09/12(水) 21:40:29.26ID:pVbQPMMe
>>203

>>189
に書いてある
2018/09/12(水) 21:42:05.84ID:T/3USJ28
>>205
地雷一覧?
2018/09/12(水) 23:06:58.17ID:2r/3byF9
>>197
>>204
ぐぐって勉強します
ありがとうございました
2018/09/13(木) 00:31:00.11ID:ECzOVYUy
test
2018/09/13(木) 00:33:41.14ID:ECzOVYUy
import re

with open('aa.txt', 'r+') as f:
 while True:
  line = f.readline()
  ret = re.search(r"^a", line)
  if(ret):
   f.writelines("---")
  if not line:
   break
2018/09/13(木) 00:34:51.38ID:ECzOVYUy

テキストファイルで"a"で始まる行を"----"に書き換えようとしたのだが、
"----"が"a"で始まる行ではなくテキストの最後に追加されます。
f.writeでも同じ。
助け舟お願いします。
2018/09/13(木) 00:41:01.41ID:ttzoAgZZ
ファイルサイズ変わるような途中の書き換えはできないので
素直に別ファイルに書き出しましょう
2018/09/13(木) 00:41:04.65ID:X3zFvlHv
>>202
このレスは何が言いたいの?
2018/09/13(木) 00:45:51.99ID:ECzOVYUy
>>211
そうなのか
サンクス
2018/09/13(木) 03:04:18.35ID:TyIiud+k
>>212
そこまでバカなら5chより幼稚園がオススメ
2018/09/13(木) 03:27:39.30ID:2ca+8xGJ
>>214
詳しく
216デフォルトの名無しさん
垢版 |
2018/09/13(木) 09:48:20.60ID:Ch5jIF+X
>>210
1行ずつ読み込むんじゃなく、read()で全部読み込んでまとめて置換して書き出したら?
2018/09/14(金) 01:19:44.19ID:13WSTRRA
tqdmについて質問です。
ラジオで今放送されている番組情報を表示するスクリプトを作っててプログレスバーを付けたいです。
https://i.imgur.com/saep34j.jpg

以下がそのコード一部です。これだとスクリプトを動かした時点がプログレスバーの0%の位置なんですが、
プログレスバーの0%の位置は番組開始時間、100%が終了時間、プログレスバー長さは現在の時間ってやる事で来ますか?
https://pastebin.com/BN0iYknv
218デフォルトの名無しさん
垢版 |
2018/09/14(金) 01:27:39.44ID:KCZmWOCp
なかなか面白い事やってるね
2018/09/14(金) 01:54:22.66ID:Vmeq3cpR
Ubuntu16.4の環境下でPython3.6でFlask+uwsgiでRESTサーバ作っており、
そこでロギングで壁に当たってます。

汎用loggerにTimeRotatingFileHandlerをaddして1時間毎にローテーションするように実装しました。
これはハンドラが作られた時間がローテションタイミングの基準点で、そこから1時間後に
ローテションって意味で、正確に毎時0分にローテーションというのは無理なのでしょうか?

また、1回目のローテーションまでは正常にローテーションしてるのですが、
2回目以降が1時間単位のインターバルが無効になってるように見え、一定のファイズサイズに達すると
勝手にローテートしてしてしまいます。 これによって1回目に退避されたログが2回目の
ローテーションファイルで上書きされていまい、実質ログが消えてしまいました。

これらの対策としては自分でTimeRotatingFileHandlerのサブクラスで拡張するや、
SocketHanderで受け側を作る構成にするか、または単純にFileHanderで永久出力して
logrotate.dでローテーションしたほうが安全なのでしょうか?

いろいろ検証してるのですが答えが見つからず・・・ 知っているかたいれば教えて対策教えてください。
2018/09/14(金) 02:15:35.00ID:13WSTRRA
>>218
変なことやってしまってますか?
2018/09/14(金) 02:38:02.20ID:YQ1y2eFS
>>219
>正確に毎時0分に、ローテーションというのは無理なのでしょうか?
そういう設定があるのでは?

>一定のファイズサイズに達すると、勝手にローテートしてしてしまいます
それは多分、ファイズサイズでローテートする設定にしているから

>これによって1回目に退避されたログが、2回目のローテーションファイルで上書きされてしまい
同じファイル名にならないように、ファイル名に時刻を付けたりすれば?

とにかく、ログローテーションの文書を読むしかないと思う
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。