【Python】 PythonでC#のFileSystemWatcher相当のクラスを作成する
C#側がファイルを作成し、それをトリガとしてpythonが起動するようにしたいと思っています。そのため、C#のFileSystemWatcherに相当するようなクラスが欲しいと思ったのですが、以下のサイトに書かれていました。 qiita.com
import time from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler class MyFileEventHandler(PatternMatchingEventHandler): def __init__(self, patterns): super(MyHandler, self).__init__(patterns=patterns) def on_moved(self, event): # ファイルが移動した時に実行されるメソッド print('file moved') def on_created(self, event): # ファイルが作成された時に実行されるメソッド print('file created') def on_deleted(self, event): # ファイルが削除された時に実行されるメソッド print('file deleted') def on_modified(self, event): # ファイルが更新された時に実行されるメソッド print('file modified') # MyFileEventHandlerの使い方例 if __name__ == '__main__': # イベントを発生させるファイルパターン file_pattern_to_watch = '*.txt' # MyFileEventHandlerを生成して event_handler = MyFileEventHandler(file_pattern_to_watch) # Observerに登録する file_system_watcher = Observer() file_system_watcher.schedule(event_handler, directory_to_watch, recursive=False) # 監視を開始 file_system_watcher.start() # 指定時間待つ time_out_sec = 30 file_system_watcher.join(time_out_sec) # タイムアウトが起きたかどうか調べる if file_system_watcher.isAlive(): # メモ:実際にタイムアウトが起きたらkillするしかない? print('timeout happened')
【WPF】 モニターの解像度を取得する
で取得できます。
以下のサイトがよくまとまった情報源になります。
【WPF】 透明なウインドウの作り方
XAMLのWindowタグに下記3つを加えるだけです。作ってみると完全に透明なウインドウが作成され、ウインドウ右上部の×ボタンも消えてしまいました。そのため、例えばEscボタンを押したらWindowをCloseするような処理が必要でした。
- WindowStyle=“None”
- AllowsTransparency=“True”
- Background=“Transparent”
参考にしたサイトは以下です。
【Python】 動的なデフォルト引数を指定するときにはNoneとドキュメンテーション文字列を使う
書籍”Effective Python”項目15のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。
Pythonはデフォルト引数をモジュールロード時の一回しか評価しないので、動的な値をデフォルト引数にはしないように、という話でした。
from datetime import datetime import time # 動的な型をデフォルト引数にしてみる def bad_example(when=datetime.now()): print(when) # 時刻が表示される bad_example() # 一秒待つ time.sleep(1) # 上と同じ時刻が表示される bad_example()
書籍ではこのような時はデフォルト引数にNoneを指定してドキュメンテーション文字列で振る舞いを書いておくことを勧めています。
def good_example(when=None): """ when: datetime of when the function is called. Defaults to the present time. """ when = datetime.now() if when is None else when print(when)
Effective Python ―Pythonプログラムを改良する59項目
- 作者: Brett Slatkin,石本敦夫,黒川利明
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/23
- メディア: 大型本
- この商品を含むブログ (5件) を見る
【Python】 クロージャ内外で変数を共有する
書籍”Effective Python”項目15のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。
Pythonにはnonlocalというキーワードがあり、これによりクロージャ内外でデータを共有できるようです。
def outer_func1(): found = False def inner_func(): # outer_func1のfoundとは別の変数 found = True inner_func() print(found) # Falseと表示される outer_func1() def outer_func2(): found = False def inner_func(): # 変数foundを外と共有 nonlocal found found = True inner_func() print(found) # Trueと表示される outer_func2()
Effective Python ―Pythonプログラムを改良する59項目
- 作者: Brett Slatkin,石本敦夫,黒川利明
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/23
- メディア: 大型本
- この商品を含むブログ (5件) を見る
【Python】 サーバーの現在時刻を取得する
Raspberry PiからサーバーのMySQLデータベースにセンサデータを書き込む時に、センサデータ取得時刻も書き込んでいるのですが、Raspberry Pi側の現在時刻がやたらずれるため、サーバーの現在時刻を取得して補正しておくことにしました。サーバーの現在時刻を取得する方法は下記になります。
from datetime import datetime import MySQLdb # DBと接続 connection = MySQLdb.connect(ip_address, user, password, db_name) cursor = connection.cursor() # サーバーの現在時刻を取得 cursor.execute('SELECT NOW()') date_time_on_server = cursor.fetchone()[0]
【Python】 enumerateのカウンタ初期値を設定する
書籍”Effective Python”項目10のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。
enumerateは知っていたのですが、カウンタの初期値を第二引数で設定できることを知りませんでした。
numbers = [1, 2, 3] # iは1から始まる for i, number in enumerate(numbers, 1): print('%d: %d' % (i, number))
Effective Python ―Pythonプログラムを改良する59項目
- 作者: Brett Slatkin,石本敦夫,黒川利明
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/23
- メディア: 大型本
- この商品を含むブログ (5件) を見る