Voor vele zal het eenvoudig zijn maar voor mij het eerste python script, dus dat geeft aan dat ik nog niet diep in de materie zit.
Ik wil een script maken dat ik straks op mijn debian server als daemon kan draaien die dan enkele directories in de gaten houdt en acties onderneemt als er bestanden of directories bij komen of weg gaan.
De basis hierbij is het volgende:
Hierbij heb ik een mailscript in verwerkt tot het volgende;
Nu moet de functie mail aangeroepen worden met als text in de mail de output van mailinhoud. Dit lukt alleen niet.
Ik begrijp niet hoe ik de output van het commando "ls -al" (nu geprobeerd vast te leggen in mailinhoud) als variabele mee kan geven aan het commando mail.
Ik wil een script maken dat ik straks op mijn debian server als daemon kan draaien die dan enkele directories in de gaten houdt en acties onderneemt als er bestanden of directories bij komen of weg gaan.
De basis hierbij is het volgende:
code:
1
2
3
4
5
6
7
| while 1: time.sleep (2) after = dict ([(f, None) for f in os.listdir (path_to_watch)]) added = [f for f in after if not f in before] removed = [f for f in before if not f in after] if added: print "Added: ", ", ".join (added) if removed: print "Removed: ", ", ".join (removed) |
Hierbij heb ik een mailscript in verwerkt tot het volgende;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| import os, time, smtplib path_to_watch = "." before = dict ([(f, None) for f in os.listdir (path_to_watch)]) def mail(serverURL=None, sender='', to='', subject='', text=''): """ Usage: mail('somemailserver.com', 'me@example.com', 'someone@example.com', 'test', 'This is a test') """ headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (sender, to, subject) message = headers + text mailServer = smtplib.SMTP(serverURL) mailServer.sendmail(sender, to, message) mailServer.quit() while 1: time.sleep (2) after = dict ([(f, None) for f in os.listdir (path_to_watch)]) added = [f for f in after if not f in before] removed = [f for f in before if not f in after] if added: print "Added: ", ", ".join (added) mail('localhost', 'afzender@test.invalid', 'ontvanger@test.invalid', 'bestand verwijderd', 'mailinhoud') if removed: print "Removed: ", ", ".join (removed) mailinhoud = 'ls -al' mail('localhost', 'afzender@test.invalid', 'ontvanger@test.invalid', 'bestand verwijderd', 'mailinhoud') before = after |
Nu moet de functie mail aangeroepen worden met als text in de mail de output van mailinhoud. Dit lukt alleen niet.
Ik begrijp niet hoe ik de output van het commando "ls -al" (nu geprobeerd vast te leggen in mailinhoud) als variabele mee kan geven aan het commando mail.