Pythonでのメールコマンド


このセクションは私がすべてを説明するようにかなり長いです、しかし、あなたは我々が設定した完全な議論を見るために下にジャンプすることができます.大きな問題は、おそらくargparseと異なる言語の両方の言語に似ていることです.
今私たちの小さなプログラムのコアを持って、我々は今、前の章の冒頭で述べた様々なフラグを追加することができます.オプションのフラグ、必要なフラグ、重複することができるフラグ、および最終的に位置の引数を追加します.我々は、非常に少しを通過する必要があります!
我々が加える最初の旗は、この冒険を始めた旗です.HTMLフラグ!
#!/usr/bin/env python3

import argparse

def main():
    parser = argparse.ArgumentParser(description="Mail replacement in python")

    parser.add_argument("-html","--html-flag", help="Set e-mail content type to html", action="store_true")

    args = parser.parse_args()
    print(args)

main()
Parserフラグに引数を追加し、いくつかの異なるものを指定できます.コマンドの短い形式を指定することができ、長いフォームを指定できます.慣例は短い形式が単一のダッシュを使用しているのに対し、コマンドの長い形式は2つのダッシュを使用します.
サイドノートでは、コマンドラインでショートフォームを使用しますが、スクリプトでは長いフォームを使います.このように、スクリプトが使用しているフラグは明らかです.
フラグを定義すると、ヘルプテキストを設定します.これは、ユーザーがアプリケーションのヘルプを実行するときに表示されます.
アクションは魔法の大きいです.StoreRain真の文字列は、このフラグがbooleanであることをargparseに伝えています.これは、コマンドのHTMLフラグの存在がフラグがtrueであることを意味します.フラグがコマンドにない場合、htmloundフラグ変数はfalseになります.
今、あなたはなぜ私がhtmchen旗を言ったか疑問に思うかもしれません.良い質問.より多くの魔法!argparseがフラグ名を使って目的変数を推論するように見えます.これはHTMLフラグがHtmlCageフラグになります.また、手動でもdestを追加することができます.
    parser.add_argument("-html","--html-flag", help="Set e-mail content type to html", action="store_true", dest="htmlFlag")
これはhtmlflag変数のこのフラグの値になります.
推論された名前はすべてかなり良いので、我々は前方に行くを使用されます.
今すぐ私たちの新しいHTMLフラグを使用してアプリケーションを実行しましょう.
> ./pymail -html
Namespace(html_flag=True)
argsがフラグを持つオブジェクトを含んでいて、それが値であることがわかります.
HTMLフラグなしでコマンドを実行できます.
> ./pymail
Namespace(html_flag=False)
パーフェクト!これがまさに我々の旗を働かせるために、旗の存在は我々に真実を与えなければならなくて、それの欠如が偽でなければなりません.
では、件名をフラグとして追加しましょう.
    parser.add_argument("-html","--html-flag", help="Set e-mail content type to html", action="store_true")
    parser.add_argument("-s","--subject", help="Specify subject on command line", default="")
もう一度私たちは短いフォームと私たちの旗の長い形式を定義します.短い形式であれば、destキーワードを設定してフラグを変数に代入します.
ここでは新しいキーワードを導入します.これは私たちの名前として、このフラグのデフォルトを設定しましょう.デフォルトを削除することができますが、手動で変数をチェックする必要があります.
> ./pymail
Namespace(html_flag=False, subject='')
> ./pymail -s "A subject line"
Namespace(html_flag=False, subject='A subject line')
これまでのところ我々の旗はオプションでした、我々が加える次の旗はFromアドレスです、そして、我々はこれが必要であることを望みます.
    parser.add_argument("-s","--subject", help="Specify subject on command line", default="")
    parser.add_argument("-r", "--from-address", help="Sets  the  From  address.", required=True)
これは非常に簡単ですが、唯一の新しいものは、我々はtrueに設定することができます必要なキーワードを持っている.
> ./pymail
usage: pymail [-h] [-html] [-s SUBJECT] -r FROM_ADDRESS
pymail: error: the following arguments are required: -r/--from-address
現在、私たちのコマンドラインユーティリティは、アドレスがなくなっているなら、エラーを投げます.
これは素晴らしい!
> ./pymail s "A body" -r [email protected]
Namespace(from_address='[email protected]', html_flag=False, subject='A body')
次のフラグは、ccアドレスを追加するフラグです.ここでは、複数のCCアドレスを指定できます.私たちはこの2つの方法を行うことができます、私たちが旗をセットアップすることができるように、それは複数の引数を取ります、しかし、単一の- Cまたは我々が望む各CCアドレスのために複数の- C旗を持つことができます.
番目のオプションは、メールコマンドが何であるかということです.
    parser.add_argument("-r", "--from-address", help="Sets  the  From  address.", required=True)
    parser.add_argument("-c", "--cc-address", help="Send carbon copies to user.", action="append", default=[])
ccフラグはappendとして動作します.これは、すべてのCCフラグが単一のリストにまとめられることを意味します.また、デフォルトのように空のリストを設定するには、このように、件名のように、我々は、変数が使用可能であることを心配する必要はありません.
今、我々はかなりのいくつかの異なるものを扱うことができるプログラムを取得し始めている!
> ./pymail -s "A body" -c test@example.com -c [email protected] -r [email protected]
Namespace(cc_address=['[email protected]', '[email protected]'], from_address='[email protected]', html_flag=False, subject='A body')

追加する次のフラグは添付ファイルです.これはCCと同じです.
    parser.add_argument("-c", "--cc-address", help="Send carbon copies to user.", action="append", default=[])
    parser.add_argument("-a", "--attachment", help="Attach the given file to the message.", action="append", default=[])
それで、我々は現在我々が我々のプログラムをコマンドラインから読む必要がある最終的なものです.これがto addressです.TOアドレスは位置引数、位置引数が必要です.
    parser.add_argument("-a", "--attachment", help="Attach the given file to the message.", action="append", default=[])
    parser.add_argument("to_address", help="Specify the to address")
これは、引数が旗であるか、または、それが位置論的な議論であるならば、ダッシュが何であるかについて、大きい魔法を持ちます.ここでのTOSHAREアドレスは、ポジション引数です.
さあ、以前のコマンドを実行してみてください.
> ./pymail -s "A body" -c test@example.com -c [email protected] -r [email protected]
usage: pymail [-h] [-html] [-s SUBJECT] -r FROM_ADDRESS [-c CC_ADDRESS]
              [-a ATTACHMENT]
            to_address
pymail: error: the following arguments are required: to_address
宛先メールアドレスを指定する必要があります.
> ./pymail -s "A body" -c test@example.com -c [email protected] -r [email protected] [email protected]
Namespace(attachment=[], cc_address=['[email protected]', '[email protected]'], from_address='[email protected]', html_flag=False, subject='A body', to_address='[email protected]')
ほとんど完了!同時に、複数の人にメールを送りたいです.の両方を位置引数とフラグとして設定しましょう.
これは単純な変更であり、フラグを指定する必要があります.
    parser.add_argument("-a", "--attachment", help="Attach the given file to the message.", action="append", default=[])
    parser.add_argument("-t", "--to-address", help="Specify multiple to addresses", action="append")
    parser.add_argument("to_address", help="Specify the to address", action="append")
今、我々はアドレスに複数を持つことができて、旗でAを指定することができます.
> ./pymail -s "A body" -c test@example.com -c [email protected] -r [email protected] -t [email protected] niv
[email protected]
Namespace(attachment=[], cc_address=['[email protected]', '[email protected]'], from_address='[email protected]', html_flag=False, subject='A body', to_address=['[email protected]', '[email protected]'])
Voila!それで我々は完了です!我々は、我々が我々のコマンドラインアプリケーションのメール部分を書くとき、我々が現在使うことができる多くの旗を持っています.
これは以下の完全なコードです.
#!/usr/bin/env python3

import argparse

def main():
    parser = argparse.ArgumentParser(description="Mail replacement in python")

    parser.add_argument("-html","--html-flag", help="Set e-mail content type to html", action="store_true")
    parser.add_argument("-s","--subject", help="Specify subject on command line", default="")
    parser.add_argument("-r", "--from-address", help="Sets  the  From  address.", required=True)
    parser.add_argument("-c", "--cc-address", help="Send carbon copies to user.", action="append", default=[])
    parser.add_argument("-a", "--attachment", help="Attach the given file to the message.", action="append", default=[])
    parser.add_argument("-t", "--to-address", help="Specify multiple to addresses", action="append")
    parser.add_argument("to_address", help="Specify the to address", action="append")

    args = parser.parse_args()
    print(args)

main()
それだけではないが、それはかなり強力です.
次の章ではメール本文ロジックを追加し、メール機能のデータをフォーマットします.