投稿

10月, 2017の投稿を表示しています

Pythonのソースコードで関数の書き方が違う場合があるのはなぜかという話(モジュールの読み込み)

イメージ
最近はPython(プログラミング言語)をちょこちょこ書いています。まだTurtleでお絵かきして遊んでいる程度で、たまにYoutubeに動画を上げたりもしています。 こんなのとか↓ さて、一応参考書は手元にあるのですが、それでも分からないときはWebサイトを検索してソースコードの書き方などを参考にすることもあります。サイトによっては同じ処理でもソースコードの書き方が違うことはあります。ただ書き方ではなく、書式自体がまったく違うというケースもあります。 例えば、「mathモジュール」を読み込んで「sin()関数」を使うというケースでは a = math.sin(i) という書き方の他に a = sin(i) という書き方も出てきます。 そしてmathモジュールの読み込み方に関しても、 import math と from math import * (またはsin()関数だけならfrom math import sin) という書き方が出てきます。そしてこのimportの書き方に対応した関数の書き方をしなければ、sin()関数を使ってもエラーとなってしまいます。ちゃんと使うには 「import math」と書いてmathモジュールを呼び出した場合は「a = math.sin(i)」 「from math import *」と書いて呼び出した場合は「a = sin(i)」 と書く必要があります。 両方ともちゃんとsin()関数は読み込めているので処理自体は同じになるわけですが、後者の方は「math.」と書かなくてもいいので楽といえば楽です。しかしこれは弊害もあって、いくつもモジュールを読み込んだ場合、その中に同じ名前の関数があると何のモジュールの関数を使っているのか分からなくなってしまいます。 (実際にはモジュールを読み込む順番で何の関数が使われるかが決まるとかなんとか?) 自分は初歩の段階でこの点が良く分からずに少しつまづいてしまいました。こういうことを踏まえておけばもう少しスムーズに調べものが出来たかと思います。 (まぁ初歩のうちはアレコレ調べ過ぎずに、参考書などをやり切った方がいいと思いますが) 実際にモジュールを読み込んで使うときは、ケースバイケースで使いやすく後から読んでも分かりやす

cronでスクリプトを定期実行させようとしたのだけど、なぜかうまく行かなかったときの原因

イメージ
【結論】 以下、長ったらしく文章を書いてますが、結論としては cronで指定するスクリプトファイルにはちゃんと実行権限を付けること です。 参考 : How to set a cron job to run a shell script? - Ask Ubuntu またUbuntuではcronのログは /var/log/syslog に出力されるようです。 CronHowto - Community Help Wiki 下の話はそこに行き着くまでの経緯なので、興味があったら読んで見てください。 趣味と実験の一環としてWebカメラを使ってタイムラプス動画を撮ったりしています。最近のだとこんな作品になってます。 これはWebカメラを接続したパソコンで制御して連続写真を撮ってるんですが(ここではcronは使っていない)、たまーにWebカメラが認識しなくなって撮影が失敗していることがあります。一度撮影をセットしたら後はほぼ放置しているので、失敗したらその日の撮影はおじゃんとなります。また失敗していることに気が付いても、大抵は数時間後になんとか分かる程度。撮影を再開しても数時間分の撮影データはロストしていることになります。毎日タイムラプス動画をYoutubeにアップロードしているように見えてたまに日付が飛んでいるのは、そういった失敗によるものです。 ここまでは前置きで、ブログタイトルにあるcronの話はここから。 まずWebカメラが認識しなくなって撮影が失敗すると、撮影に使用しているプログラムがエラーをログファイルに出力します。撮影が順調に進んでいるかどうかを確認するには、常にログファイルを監視してエラーがないことを見ていればいいわけです。さて、監視すればいいとはいっても付きっきりで見ているわけにもいかないので、ここでcronを使ってログファイルにエラーが出力されているかどうかを定期的に調べればいいという算段です。 処理としてはそう難しい話ではなくて、単にgrepコマンドでエラーメッセージを拾うようにすればいいだけ。それをスクリプトファイル化してcronで数分毎に実行することで、撮影が失敗してるかどうかをチェックすることが出来ます。 (実際にはチェックに引っかかったらメールや通知を飛ばす処理や、自動的に撮影再開出来るように

スポンサーリンク