全2件 (2件中 1-2件目)
1
私が比較的よく訪れるサイトの一つにthe mouse vs. the pythonpython programming from the frontlinがある。Pythonプログラミングのヒントがいろいろ掲載されるので好きなサイト。今日は、Getting Your Screen Resolution with Pythonというのが載っていたのでやってみた。Using the Linux Command LineUsing PyGTKUsing wxPythonUsing TkinterUsing PySide / PyQtそれぞれの記述がある。いずれにせよ、下回りは、Windowsなら PyWin32 の win32api か ctypes 、Mac なら AppKit とか、プラットフォームに依存しているわけだが、上記のようなクロスプラットフォームな GUI のフレームを使うことによって吸収されるので、意識する必要はない。ちなみに、最初の Linux の例では、X Window 環境なら xrandr | grep '*' でコマンドの出力から '*' のある行を取り出して、最初の部分に解像度があるので、テキスト処理をしているというもの。コマンド出力をちょっと処理してというのを subprocess.Popen でパイプ処理してという類の参考になる。つまり、こんな感じ、あとでパイプ処理を他の用途に流用できるようにしてみた(1つコマンドを実行して、その結果を2つ目のコマンドで処理してのパターン)。import subprocessdef command2pipe(cmd1, cmd2): p = subprocess.Popen(cmd1, stdout=subprocess.PIPE) p2 = subprocess.Popen(cmd2, stdin=p.stdout, stdout=subprocess.PIPE) p.stdout.close() first_line, rest_lines = p2.communicate() return(first_line, rest_lines)if __name__ == '__main__': cmd1 = ['xrandr'] cmd2 = ['grep', '*'] resolution_string, junk = command2pipe(cmd1, cmd2) resolution = resolution_string.split()[0] width, height = resolution.split('x') mesg = "Resolution: %sx%s" % (width, height) print(mesg)というのはさておき、それぞれの例をやってみたが、Linux 上では問題なく動いた。 Windows 10 上でも Linux のは別として、すべて問題なく動いた。クロスプラットフォームではなく Windows 上だけで動くことを前提であれば、Win32api や ctypes で呼び出した方が、読み込み時間が少ないので速い。from win32api import GetSystemMetricsprint "Width =", GetSystemMetrics(0)print "Height =", GetSystemMetrics(1)か、もっと最低限の読み込みだと、import ctypesuser32 = ctypes.windll.user32screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)How do I get monitor resolution in Python? を見ると、もうちょっと、正確にやるにはどうしたらよいかというのも色々議論がある。例えば、Windows 上で DPI やデスクトップスケーリングを考慮した場合にはどうなるとか。(dpi_and_the_desktop_scaling_factor)。ところで複数のモニターとか接続してたらどうなるのか。あれこれ考慮し始めると面倒なことになる。なので、先人の成果をいただいて、pip install screeninfofrom screeninfo import get_monitorsfor m in get_monitors(): print(str(m))でよいかと。すばらしい。
2015.08.21
コメント(0)
Pascal van Kooten さんの yagmail (Yet Another GMAIL client) を使ってみた。インストールpip install yagmail~/.yagmail にアカウント名だけ1行入力しておき、メールを送信してみる。import yagmailyag = yagmail.SMTP()contents = ['This is the body, and here is just text http://somedomain/image.png', 'You can find an audio file attached.', '/local/path/song.mp3']yag.send('to@someone.com', 'subject', contents) そうすると、パスワードを入力できるのだが、入力しても、smtplib.SMTPAuthenticationError: (534, '5.7.9 Application-specific password required. Learn more at\n5.7.9 https://support.google.com/accounts/answer/185833 jdddddddddddddd.96 - gsmtp')のようなエラーが表示されてメールを送信できない。アプリ パスワードでログインのページを参照する。2 段階認証プロセスを使用してあるアカウントから送信したので、このエラーとなったと分かる。Google のアプリパスワードを設定してやり、表示されたコードをパスワードに設定すると、メールが送信できるようになった。まずは、アプリパスワードを生成して、上記のコードの一部をyag = yagmail.SMTP('GMAILのアカウント', 'アプリパスワード')と書き換えてメールを送信すると、送信成功。そのままスクリプトの中に入れておくのは、よろしくないので、keyring に登録し直す。yagmail.register('GMAIL のアカウント', 'アプリパスワード')を実行して、keyring に登録し直す。これで、設定スクリプトは削除して、最初のスクリプトでメールが送信できるようになった。HTML メールも、画像の添付も簡単なので便利。yagmail の使い方。yagmail 素敵。スクリプトから生のパスワードを追い出すには、keyringを使うのがいいなと改めて認識。次のページも参照。python:keyringによるパスワード管理スクリプトから生パスワードを追い出す
2015.08.06
コメント(3)
全2件 (2件中 1-2件目)
1