problem mit subprocess.call

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

hallo,

wie man sich denken kann, anfänger - sorry
kann mir einer sagen, warum mein code immer einen OSError macht. was muß ich ändern

Code: Alles auswählen

import os, sys, subprocess
try:
#    os.system ("crontab -l > mycron.txt")
    subprocess.call ("crontab -l > mycron.txt")
    f = "ok"
except Exception as e:
    f = ("Fehlermeldung:", e.args[0])
   

Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@muscat: Du benutzt hier Shell-Befehle, die call nicht kennt. Falls Du mit der Ausgabe von crontab weiterarbeiten willst, solltest Du sie nicht erst in eine Datei schreiben, sondern direkt damit arbeiten. Die Exception sollte man an der Stelle, wo sie sinnvoll behandelbar ist behandeln, und nicht in eine Variable `f` (schlechter Name, weil nichtssagend) entweder einen String oder ein Tuple schreiben, das dann wieder später mühselig auseinander genommen werden muß.

So:

Code: Alles auswählen

import subprocess
with open("mycron.txt", "wb") as output:
    subprocess.call(["crontab", "-l"], stdout=output)
oder so:

Code: Alles auswählen

import subprocess
for line in subprocess.Popen(["crontab", "-l"], stdout=subprocess.PIPE).stdout:
    print(line)
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

hallo Sirius3,

danke. hat an meinem Raspi vor mir geklappt. Auf meinen entfernten Raspi, zu dem ich nur per email zugriff habe leider nicht.
habe mich jetzt entschlossen, eine neue speicherkarte zu erstellen, und dorthin zu schicken.
morgen versuche ich mich, den crontab per email neu zu schreiben. du befürchtest richtig, wenns nicht klappt, bin ich wieder hier.

thanks

georg
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

moin,

es geht. Ist es so auch in Ornung? Habe den code sicher nicht 100% verstanden bislang. sorry.

thanks

georg

Code: Alles auswählen


import os, subprocess, m100, time, datetime

with open("mycron.txt", "rb") as output:
    subprocess.call(["crontab"], stdin=output)

Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@muscat: in diesem Fall einfach

Code: Alles auswählen

subprocess.call(["crontab", "mycron.txt"])
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

hallo,

sorry noch mal ein Problem.
kann es sein, wenn ich subprocess.call an der Konsole ausführe, als Administrator mit sudo su, dass es klappt
und wenn ich es über einen crontab ausführen lasse, klappt es nicht?
weiß da im Moment nicht weiter.

danke

georg
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@muscat: Du willst CronJobs mit einem CronJob setzen? Kannst Du das genauer erklären?
muscat
User
Beiträge: 11
Registriert: Montag 27. März 2017, 07:32

sorry, wenn ich unklar rüberkomme.
Ich habe eine Raspi am laufen, der nicht in Reichweite ist, und meine Beregnung im Garten steuert. Leider kann ich nur über email mit dem Raspi kommunizieren, da es über einen Router vom Nachbarn läuft. Ich möchte jetzt die Beregnungszeiten, die per CronJob gesteuert werden ändern. Dazu wollte ich mit subprocess.call die alten CronJobs lesen und dann neue auf den Raspi schreiben.
Das lesen und schreiben der CronJobs, sowie das auswerten der emails wird natürlich vom lfd. CronJob veranlasst.

thanks georg
Antworten