Pythonのsubprocessモジュールの使用 [misc]
その際、OS のコマンドの実行に subprocess モジュールのどの関数を使用すべきかを理解するまでに時間を要したため、備忘録としてまとめてみた。
(Python のバージョン: 3.9.2)
1. 使用する関数の判断方法
(1) コマンドの実行結果を実行時に値として取得する場合
subprocess.Popen() を使用する。
【サンプルコード-1】
#!/usr/bin/python import subprocess cmd = 'ls -1 /var/log/clamav' print("# cmd:", cmd) proc = subprocess.Popen(cmd, shell=True, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print("# proc.stdout:") for i in proc.stdout: print(i, end='') print("# proc.stderr:") for i in proc.stderr: print(i, end='') proc.wait() print("# proc.wait(); proc.returncode:", proc.returncode)
・コマンドの終了を待たず、実行結果を値として取得する。
・Popen.wait() によりコマンドの終了を待つ。
Popen.wait() を Popen.communicate() に変更しても同じ結果が得られる。
・コマンドの終了後に終了ステータスを値として取得する。
(2) 上記以外の場合
(a) subprocess.run() の使用を検討する。
【サンプルコード-2】
#!/usr/bin/python import subprocess cmd = 'which xz' print("# cmd:", cmd) proc = subprocess.run(cmd, shell=True, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print("# proc.returncode:", proc.returncode) if proc.returncode == 0: print("# proc.stdout:", proc.stdout.rstrip('\n')) else: print("# proc.stderr:", proc.stderr.rstrip('\n'))
・コマンドの終了後に終了ステータスと実行結果を値として取得する。
【サンプルコード-3】
#!/usr/bin/python import subprocess cmd = 'which xz' print("# cmd:", cmd) proc = subprocess.run(cmd, shell=True, text=True) print("# proc.returncode:", proc.returncode)
・終了ステータスのみを値として取得する。
・コマンド実行時の出力の有無は、コマンドのリダイレクトの設定による。
出力なしとする場合には、'cmd >/dev/null 2>&1' のように実行する。
(b) 終了ステータスのみが必要な場合は、subprocess.call() の使用も検討する。
【サンプルコード-4】
#!/usr/bin/python import subprocess cmd = 'which xz >/dev/null 2>&1' print("# cmd:", cmd) status = subprocess.call(cmd, shell=True) print("# status:", status)
・終了ステータスを値として取得する。
・コマンド実行時の出力なし。
コマンド実行時の出力の有無は、コマンドのリダイレクトの設定による。
Gmailのアプリ・パスワードの使用 [misc]
・[安全性の低いアプリの許可] を有効化できなくなったためである。 ・2 段階認証を無効にしている。
また、アプリ・パスワードを使用すると、上記の問題を解決できるとの情報が得られた。
・アプリ・パスワードを使用するには、2 段階認証を有効にする必要がある。 ・アプリ・パスワードの使用により、2 段階認証をバイパスできる。 ・アプリ・パスワードは、Web ブラウザでのログインには使用できない。
よって、アプリ・パスワードを使用するように設定の変更を行った。
手順は、以下の通りである。
1. アプリ・パスワードの生成
(1) SMS の着信の許可
・設定の変更に必要な確認コードを受信するためである。
・確認コードは、050-5840-1910 から送信される。
(2) Web ブラウザでの Gmail へのログイン
(3) 個人情報への電話番号の登録
電話番号の登録を削除しているため、電話番号を再度登録する。
(a) 設定画面の表示
・右上のアイコンから [Google アカウントを管理] を選択
・上部のメニューから [個人情報] を選択
・[連絡先情報] の欄で [電話] を選択
(b) 電話番号の登録
・電話番号を入力
・確認コードを入手
'G-xxxxxx' の 'G-' を除く部分が確認コードである。
・確認コードを入力し、電話番号を登録
(4) 2 段階認証の有効化
(a) 設定画面の表示
・右上のアイコンから [Google アカウントを管理] を選択
・上部のメニューから [セキュリティ] を選択
・[2 段階認証プロセス] を選択
(b) 2 段階認証の有効化
・コードの取得方法として、[テキスト・メッセージ] を選択 (電話番号は、国番号の直後の '0' が削除されて表示される。) ・確認コードを入手 ・確認コードを入力し、変更を実施
(c) バックアップ・コードの入手
・下方の [バックアップ コード] を選択 ・[バックアップ コードを入手しましょう] を選択 ・表示されたバックアップ・コードを保存
(5) アプリ・パスワードの生成
(a) 設定画面の表示
・右上のアイコンから [Google アカウントを管理] を選択
・上部のメニューから [セキュリティ] を選択
・[アプリ パスワード] を選択
(b) アプリ・パスワードの生成
・アプリとデバイスを指定 (例) アプリ=メール、デバイス=その他(パソコン) ・[生成] を選択 ・表示されたアプリ・パスワードを保存 ・[完了] を選択
(6) 後処理
上記で許可した SMS の着信を取り消すことも可能である。
2. アプリ・パスワードの使用
POP/SMTP でのログイン時に、パスワードの代わりにアプリ・パスワードを使用する。
Google検索の不要なポップアップの削除 [misc]
最初は手動で対応していたが、面倒に感じるようになったので、ポップアップ・ウィンドウを消去する対応を行った。
詳細は、以下の通りである。
1. 発生事象
Google 検索において、不要なポップアップ・ウィンドウが表示される。
(1) Google へのログインを促す(確認する)もの
(2) ゴールデンウィークの予定を確認するもの
(補足)
ページの再読み込みを実行すると、ポップアップ・ウィンドウは消える。
2. 対処方法
uBlock Origin に下記の設定を追加する。
!! block popup window on google search ||ogs.google.co.jp/widget/callout … 発生事象 (1) への対応 www.google.co.jp##mobile-promo … 発生事象 (2) への対応
GmailからのPOP受信で有用なフィルターの設定 [misc]
・PC では、POP/SMTP サーバーを使用してメールの送受信を行う。
必要時に、POP サーバーを使用してメールを受信する。
必要時に、SMTP サーバーを使用してメールを送信する。
定期的に、POP サーバーにアクセスしてメールの有無を確認する。
・スマホでは、Gmail アプリを使用してメールの送受信と参照を行う。
・Gmail の設定変更は、PC から Gmail にログインして行う。
以下は、上記の使用方法において、有用と思われるフィルターの設定についての説明である。
1. 送信済みメールを POP で新着メールとしないための設定
条件: in: sent ← [含む] 欄で指定 処理: 既読にする、削除する
2. 特定のアドレスからのメールを迷惑メールしないための設定
条件: from: xxx ← [From] 欄でアドレスを指定 処理: 迷惑メールにしない、カテゴリ "メイン" を適用
3. ゴミ箱の保存期間を 14 日に短縮するための設定
条件: in:trash AND older_than:14d ← [含む] 欄で指定 処理: 削除する
(追記)
設定としては間違っていないが、下記の理由から機能しないことが判明した。
・ゴミ箱、および迷惑メール内のメールについては、フィルター処理の適用外となる。
(検索はできるが、検索されたメールへの処理が実施されないようである。)
Firefox でのGoogle 翻訳、PDF Viewerのフォント指定 [misc]
Firefox 78.11.0 ESR
1. 発生事象
Firefox において、Google 翻訳、PDF Viewer の表示で下記の問題が発生する。
また、[ウェブページが指定したフォントを優先する] を選択すると改善される。
(1) Google 翻訳
アイコンの表示がおかしい。
・上部の [テキスト/ドキュメント] ボタンのアイコン 英語で表示され、ボタンのタイトルと重なる。 ・中央部の [言語の入れ替え] ボタンのアイコン 英語で表示され、言語名と重なることがある。
・ウィンドウの幅が狭い状態では、発生しない。
言語の候補が入出力で 3 個ずつ表示された状態で、発生する。
(2) PDF Viewer
エラー・メッセージが表示され、一部または全部が表示されないことがある。
[エラー・メッセージ] この PDF 文書はサポートされていないため正しく表示できない可能性があります。
2. 対処方法
[ウェブページが指定したフォントを優先する] を選択しない。 ・すべてのページで適用され、デメリットが大きいため。
(1) Google 翻訳
(a) 上部のボタンの表示を補正する場合
不要なコンテンツを削除するためのフィルターやスタイルを追加する。
uBlock Origin の場合には、[Myフィルター] に、下記のエントリーを追加する。
# ボタン上のアイコンを削除する場合 (後から 4 文字目は数字の 0) translate.google.co.jp##.ep0rzf # ボタンを削除する場合 (後から 2 文字目は大文字の o) translate.google.co.jp##.hgbeOc
・2018-11 の変更で、Material Icons が使用されるようになった。
この部分のアイコンが表示できない時に、上記の問題が発生する。
(b) 別の翻訳サイトを使用する場合
(例) ・Bing 翻訳 https://www.bing.com/translator/ ・DeepL 翻訳 https://www.deepl.com/ja/translator ・Weblio 翻訳 https://translate.weblio.jp/
(2) PDF Viewer
(a) PDF Viewer で表示する場合
・問題の発生時に、[ウェブページが指定したフォントを優先する] を選択する。 ・PDF Viewer の出力を再読み込みする。 ・PDF Viewer の使用後、上記のフォント選択を元に戻す。
(b) 他のビューアーで表示する場合
問題の発生時には、[ほかのビューアーで開く] ボタンが表示される。 よって、表示されたボタンをクリックし、他のビューアーを選択する。
AFN 360のURLの変更 [misc]
[AFN(American Forces Network)]
米軍が駐留する地に設けられた基地関係者とその家族向けの放送局である。
日本では、1997 年まで FEN(Far East Network) と呼ばれていた。
(変更前)
https://afn360.afnpacific.net/afnp_tko
(変更後)
https://www.afnpacific.net/Portals/101/360/AudioPlayer2.html#AFNP_TKO
再生ボタンを選択できない場合には、下記の手順を実施すること。
・右側下部の (L) のアイコンをクリックし、Lite Player を選択する。
Thunderbirdの返信ヘッダーのカスタマイズ(アドオンの使用) [misc]
また、この機会に有用なアドオンがないかを検索したところ、changeQuote をいうアドオンに行き着いた。返信ヘッダーをカスタマイズするアドオンである。
個人的には、簡単な設定で、十分な効果が得られた。
尚、Thunderbird 78.11.0 も試したが、 I/F が好きになれず、アンインストールした。
・スケジュール管理等、本来のメール以外の機能が目立ち過ぎるように思われる。
・Content-Language: の設定を無効化できるようなので、出来れば使用したかった。
(無視しても問題ないヘッダー項目とは思うが、出来るなら無くしたい。)
設定方法と出力される返信ヘッダーは、以下の通りである。
1. ソフトウェアのバージョン
changeQuote 1.4
https://addons.thunderbird.net/ja/thunderbird/addon/changequote/versions/
2. 設定(例)
・[返信ヘッダ] タブで、下記の設定を行う。
・その他については、初期値を使用する。
(1) 返信ヘッダーのフォーマット
(a) type-1 (必要最小限の情報にする場合)
[返信ヘッダのカスタマイズ] を選択し、下記のように指定する。 On %%5, %%7 wrote:
(b) type-2 (主要なヘッダー項目を使用する場合)
[返信ヘッダの拡張] を選択し、オプション項目は何も選択しない。
(c) 追加オプションの選択
何も選択しない。
(2) 返信ヘッダーで使用する日付のフォーマット
[長い日付形式にする] を選択を選択する。 また、[形式のカスタマイズ(受取人ロケール時間)] で下記のように指定する。 %Y-%m-%d %H:%i:%s %z
3. 返信ヘッダーの出力(例)
(1) type-1 の場合
On 2021-06-05 01:23:45 +0900, sender-address wrote: > ...
(2) type-2 の場合
-------- Original Message -------- Subject: xxx From: xxx To: xxx Date: 2021-06-05 01:23:45 +0900 > ...
GmailのPOP受信/SMTP送信 [misc]
詳細は、以下の通りである。
1. 共通の設定
(1) Gmail での設定
(a) セキュリティの設定画面の表示
・Gmail にログイン
・右上のアイコンをクリックし、[Google アカウントを管理] を選択
・一覧から [セキュリティ] を選択
(b) [2 段階認証プロセス] を無効化
無効化後は、パスワードの入力のみでの認証となる。
(c) [安全性の低いアプリのアクセス] を有効化
有効化後は、Google 以外のアプリからのアクセスが可能となる。
尚、アクセスがブロックされた場合には、その旨のメールを受信する。
2. POP 受信の設定
(1) Gmail での設定
(a) POP の設定画面の表示
・Gmail にログイン
・上部の歯車アイコンをクリック
・[すべての設定を表示] を選択
・[メール転送と POP/IMAP] の設定を選択
・[POP ダウンロード] を選択
(b) POP の有効化
[すべてのメールで POP を有効にする] を選択
(c) POP でダウンロードしたメールの処理
(例)
[Gmail のメールを削除する] を選択
(2) メールクライアントでの設定
・POP サーバー: pop.gmail.com ・ポート: 995(POP-3 over SSL) ・認証: 有 ユーザー名には Gmail のメールアドレスを設定
3. SMTP 送信の設定
(1) メールクライアントでの設定
・SMTP サーバー: smtp.gmail.com ・ポート: 587(STARTTLS) または 465(SSL) ・認証: 有 ユーザー名には Gmail のメールアドレスを設定 ・認証方式: PLAIN または LOGIN (CRAM-MD5 には未対応)
Gmailのフィルタでの条件指定(論理和/論理積/否定の使用) [misc]
今回、どうしても使用する必要があり、久しぶりに本格的に使用した。
ここで問題となったのが、フィルタの条件を指定する際の仕様が不明確な点である。
・各入力欄での論理和/論理積/否定の指定方法
・フィルタの一覧表示での {...} と (...) の違い
取り敢えず、説明がつくようになったため、備忘録としてまとめてみた。
詳細は、以下の通りである。
1. フィルタの条件の指定
(1) 特定の入力欄での指定
(a) [含まない] 以外の入力欄の場合
複数の条件を半角スペースで接続した場合には、論理積と解釈される。
AND で接続した場合と同じである。
作成される条件: (条件1 条件2) または (条件1 AND 条件2)
また、論理和としたい場合には、OR で接続する。
作成される条件: (条件1 OR 条件2)
(b) [含まない] の入力欄の場合
複数の条件を半角スペースで接続した場合には、論理和と解釈される。
OR で接続した場合と同じである。
さらに、この論理和を否定する条件指定となる。
(個々の条件の否定を AND で接続するとも言える。)
作成される条件: !{条件1 条件2} または !{条件1 OR 条件2}
また、論理積としたい場合には、AND で接続する。
この論理積を否定する条件指定となる。
(個々の条件の否定を OR で接続するとも言える。)
作成される条件: !{条件1 AND 条件2}
(2) 複数の入力欄での指定
各入力欄で指定した条件が AND で接続される。
(3) [含まない] 以外の入力欄での否定条件の指定
下記のような指定が可能である。
-(条件) (例) "From に @xxx.com を含まない" という条件の指定 ・[From] 欄での指定 -(@xxx.com) ・[含む] 欄での指定 -(from:@xxx.com)
また、論理和、論理積を否定する場合は、下記のように指定する。
-{条件1 条件2}、-{条件1 OR 条件2}、-{条件1 AND 条件2} -(条件1 条件2)、-(条件1 OR 条件2)、-(条件1 AND 条件2)
(4) [含む]、[含まない] の入力欄での検索対象の指定
・検索対象の指定がない場合、メール本文を含むすべてが検索対象となる。
・ヘッダー項目の指定がある場合、指定したヘッダー項目のみが検索対象となる。
(From 等の専用の入力欄での指定と同様である。)
・その他にも、ラベル(label:) やカテゴリ(category:) 等での指定が可能である。
(例) aaa@xxx.com ← メール本文を含むすべてが検索対象となる cc:aaa@xxx.com ← Cc のみが検索対象となる
2. フィルタの一覧表示
フィルタの一覧表示での () と {} の違いは、下記の通りと思われる。
・() の場合には、AND/OR の指定がなければ AND で接続される。 ・{} の場合には、AND/OR の指定がなければ OR で接続される。 ・いずれの場合も、AND/OR の指定があれば、指定された演算子で接続される。
3. フィルタの適用順序の変更
フィルタは、一覧の上から順に適用される。
また、フィルタの順序を変更する機能は、現在提供されていない。
このため、フィルタのエクスポート/インポートを使用して対応する。
実施手順は、下記の通りである。
・すべてのフィルタを選択し、エクスポートする。
・エクスポートしたファイル(XML ファイル) を編集し、順序を変更する。
(<entry>〜</entry> の単位で移動する。)
・既存のフィルタを削除する。
・編集後の XML ファイルを使用し、インポートする。
・インポートした内容でフィルタを作成する。
Firefoxでアイコンが文字化けすることへの対応 [misc]
・Firefox 78.4.0esr (on Linux/Windows)
・Firefox 52.9.0esr (on Linux/Windows)
1. 発生事象
Firefox において、アイコンの文字化けが発生する。
・ツイッター等のアイコンの文字化け
・uBlock Origin アドオンのダッシュボードでのアイコンの文字化け
([フィルター一覧]、[Myフィルター] 等で発生)
2. 原因
下記のようなフォント設定を行っているためである。
(例) Linux の場合 * { font-family: "Sazanami Gothic", monospace !important; }
【設定の目的】
・明朝体を使用したくないため。
([ウェブページが指定したフォントを優先する] を無効化している。)
【設定箇所】
・Stylus アドオン
・<profile-dir>/chrome/userContent.css
【設定の問題点】
・すべてのコンテンツを対象としていることが問題である。
3. 対処方法
下記のように設定を変更する。
(1) 原因となっている設定の訂正
上記の原因となっている設定を下記のように変更する。
body { font-family: "Sazanami Gothic", monospace !important; }
(2) 設定の追加
Firefox のフォントの詳細設定で、下記の設定を行う。
上記 (1) の設定の対象から漏れるコンテンツへの対応である。
(章のタイトル、等)
・日本語の明朝体フォントにゴシック体のフォントを指定する。
明朝体 (Serif): Sazanami Gothic
(明朝体を使用する Web ページへの対応)
・必要なら、ラテン文字、その他の表記体系についても同様の設定を行う。
(lang 属性が英語、Unicode の Web ページへの対応)