ラベル プログラム の投稿を表示しています。 すべての投稿を表示
ラベル プログラム の投稿を表示しています。 すべての投稿を表示

2018年5月31日木曜日

"Invalid value" というエラーに悩まされながら Python から Google スプレッドシートを更新した

はい、表題の通りです。日本語の情報がなかなか見当たらず難儀したのでここに記しておきます。目的としてはRaspberry Piで自室のCO2濃度を測定しGoogleスプレッドシートにログを記録していくだけの簡単なお仕事です。

2017年5月25日木曜日

display:none; の img は読み込まれるか?実験してみた

表題の通りです。このブログにピクセルタグ埋め込んだらピクセルに輪郭つけてくれたので…というのがきっかけ。調べてみてもよく分からなかったので実験してみるほかなし。検証の方法はとっても簡単。自分で管理しているサーバに対して img でリクエストを投げてアクセスログを眺めるだけ。開発者モードでリクエスト自体を観測してもいいけど、携帯だと面倒なのでこの方式で。

① Google Chrome for Windows


② Google Chrome for Android


③ Mozilla Firefox for Windows


④ Internet Explorer


⑤ Microsoft Edge


ということで基本的には読み込まれるみたいです。ということでピクセルタグは安心して display:none; できそう。

2014年4月5日土曜日

python でファイルに append するとき

自分がつまずいたので、誰かの役に立てば。。

一番簡単なのは組み込み関数 open を使う方法。
f = open("filename", "a")
f.write("hogehgoe")
f.flush()
f.close()

aは append の頭文字。ファイルが既に存在している時は、末尾にデータを書き加えていく。
ファイルが存在しない時は、w(write)と同様で、ファイルを作成してデータを書き込んでいく。
ただしこの方法では作成されたファイルのパーミッションが設定できなかったはず。
そこで2番目の方法、 os.fdopen と os.open を使う方法。

f = os.fdopen(os.open("filename", os.O_APPEND | os.O_CREAT, 0755), "a")
f.write("hogehgoe")
f.flush()
f.close()

まず os.open でファイルを開く。その時に flag として O_APPEND と O_CREAT (ファイルが
存在しない時はファイルを作成する)を指定し、作成時のパーミッション 0755 (最初の0は
8進数の意味)を引数として与える。
そして次に os.fdopen で読み書きに必要なファイルオブジェクトを取得する。ここでもaモードを
指定しておかないと、ファイルオブジェクトのほうが追記モードであることを認識できないから
f.write で IOError が発生する。

さて、ここで invalid argument がと言われてしまって困った。
結果から言うと、 os.open の flag には O_RDONLY, O_WRONLY, O_RDWR のいずれか1つだけを
必ず指定する必要がある。それぞれ読み取り専用、書き込み専用、読み書き可能。
したがって、この例だと1行目を以下のように書き換えればよい。

f = os.fdopen(os.open("filename", os.O_APPEND | os.O_CREAT | os.O_WRONLY, 0755), "a")


ちなみに、 C# や Java なんかだと、 flush や close を勝手にやってくれる using なんてものが
ありますが、 python にも似たようなものがあって、 with というものらしいです。

with os.fdopen(os.open("filename", os.O_APPEND | os.O_CREAT | os.O_WRONLY, 0755), "a") as f:
f.write("hogehoge")

これでいいらしい。