これを行う方法はたくさんあるかもしれませんが、これを行う方法を探し始める場所がわからないので尋ねています。私はいくつかの基本的なbashコマンドを実行し、出力に基づいて特定の電子メールアドレスに電子メールを送信するpythonスクリプトを持っています。その情報がスクリプトの最終出力と異なる場合にのみ電子メールが送信されるようにしたいと思います。円柱のpythonスクリプトは、前回の実行結果を使用する必要があります
私は 'lpstat -p'を実行し、プリンタ 'a'が無効になっているため、cronはスクリプトを1時間後に実行するため、電子メールを送信します。電子メール通知。
私は詳細まで説明しているかもしれませんが、実際にはスクリプトの以前の実行で何が起こったのかをスクリプトが知りたいだけです。私はファイルに "タッチ"を実行することができることを知っているが、それはあまりにも原始的なように思えるので、あまりにも複雑になることなく、Pythonがこれを扱う良い組み込みの方法を持っているのだろうかと思っていた。
私の説明が意味をなさない場合、私がやっていることの簡単な例です。
# The string used to find disabled pritners based on the stdout of lpstat
string_check = 'disabled'
stdout = commands.getoutput('lpstat -p')
lpout = stdout.split('\n')
disabled = []
# Cycle through the output of lpstat which has been split into tokens based on each line of the output and save the lines that have a substring match with string_check
for line in lpout:
if string_check in line:
disabled.append(line)
# Initiate the required variables for constructing a basic email
new_message = ""
SERVER = ""
FROM = ""
TO = ""
SUBJECT = ""
TEXT = ""
message = ""
# Just some string manipulation - tries to remove useless, redundant information from the lpstat output
for line in disabled:
line = line.replace("printer ", "")
line = line.replace(" is ", "")
line = line.replace("idle.", "\t")
line = line.replace(string_check, "\t")
new_message += "\t" + line + "\n"
SERVER = "localhost"
FROM = "email"
TO = "email"
SUBJECT = "Printer unnexpectedly disabled"
TEXT = new_message
# Email template
message = """\
From: %s
To: %s
Subject: %s
Printers that seem to be disabled:
%s
""" % (FROM, TO, SUBJECT, TEXT)
# if there ended up being some stuff in the disabled array then send the email
if len(disabled) > 0:
server = smtplib.SMTP(SERVER)
server.sendmail (FROM, TO, message)
server.quit()
ここでShelveモジュールがおそらく私のお気に入りです。それはフードの下でPickleを使用するので、他の答えのいくつかを含んでいますが、その使い易さは、PickleやcPickle IMHOのより良い代替手段になり、スクリプトが並行性を心配する必要がない限り、私が遭遇した棚。 –
非常に役に立ちます。これは、SQLiteセットアップのようなものを手に入れることなく、スクリプトを実行するたびに何が起こるのかを把握するのが、最も面倒な方法です。どうもありがとう。 – jphenow