|> Weeeeeeb

どんどんドーナツどーんと行こう!(10万円山さん)

cronを使ってやってしまった件

ヤラカシタ....

先週からPython(Pyramid)でコマンドを作成し、
それをcronで定期実行すると言うよくあることをやっていた。
(ただcronが何なのかくらいの知識しかない私

本日プルリクが通ってリリース後の下記コマンドを実行して
動作検証を行った。

    $ crontab -e
    $ crontab -l

動作検証の結果、エラーが発生。
Pyramidで作成したコマンドのパスが通っておらず実行出来なかった。

私の浅知恵では、

cronはユーザーごとに管理されている。
よって環境変数もユーザーに依存しているはずだ!
ユーザーのホームディレクトリ = cronのホームディレクトリからも言えよう!

と考えており当然コマンドの実行が叶うとばかり考えておりました。
ここまではすぐに修正できる。やってしまったのはこの後

まさかのフルパス

ダサい・・・エンジニア?という自問自答ですよねorz 時間が無かったとはいえフルパスはよろしくない....@帰りの電車
どうしてコマンドが通らなかったのか、
どう修正すれば良いのか調べて明日再度cronの修正させてもらう

という失敗備忘録(つづく。。。

Pythonでポリモーフィズム

Pythonポリモーフィズムを使いたくてインターフェースを探したがまさかのなし。 スクリプト初心者はびっくり。さらにググります。

でもpython3系からは抽象クラスを表現できるとのことで頑張ってみることに 結局ベースとなるクラスを抽象クラスとしてポリモーフィズムを利用した

備忘録

  1. 抽象クラス 抽象クラスを定義する際は下記を定義し、
    クラス名の後にmetaclass=ABCMetaと記述(abstractmethodは適宜追加のこと)

    from abc import ABCMeta, abstractmethod

  2. 抽象メソッド 抽象メソッドは定義するメソッドの上に@abstractmethodを記述

  3. 静的メソッド 余談では有りますが、Pythonでは静的メソッドに対して
    @staticmethodを記述することで、そのメソッドは静的メソッドとなります

  4. 組み合わせ 抽象メソッド・静的メソッドを組み合わせる場合はアノテーションを繰り返すせばよい

以上のことを踏まえて簡単に抽象クラスと継承クラスを記述しました
(該当箇所に#で番号を振ってあります)

   # 1.
  from abc import ABCMeta, abstractmethod

  class BasePush(metaclass=ABCMeta):
      @staticmethod
      @abstractmethod # 2, 4.
      def push(msg):
          pass

  class Push(BasePush):
      @staticmethod # 3.
      def push(msg):
          # 送信処理