ich habe ein recht dringendes Problem und bin an einer Stelle angekommen, an der ich nicht weiter weiß.
Darum geht es:
Ich habe ein Python-Programm geschrieben, das Accountdaten aus einer MySQL-Tabelle nimmt und aus diesen dann über den Aufruf eines Programms account über die Shell einen eMailAccount erstellt.
Problem:
Rufe ich das Programm über die Shell auf, läuft es durch, wie es soll. Wird es jedoch durch einen CronJob aufgerufen, verursacht das Programm account den OSError: [Errno 25] Inappropriate ioc. Das passiert ebenso, wenn ich das Programm mit nohup python programm.py & in den Hintergrund schiebe.
Konkret:
Code: Alles auswählen
Traceback (most recent call last):
File "/root/scripts/account.py", line 190, in ?
main()
File "/root/scripts/account.py", line 25, in main
check_login(options.login)
File "/root/scripts/account.py", line 92, in check_login
username = get_system_userdata()[0]
File "/root/scripts/account.py", line 162, in get_system_userdata
username = os.getlogin()
OSError: [Errno 25] Inappropriate ioctl for device
stderr und stdout werden in Datein umgeleitet. Der Aufruf von account geschieht über subprocess.call, wobei shell=True gesetzt wird und stderr sowie stdout auf sys.stderr bzw. sys.stdout (in Datei umgeleitet) gesetzt werden (wegen Lesbarkeit umgebrochen):
Code: Alles auswählen
out = subprocess.call("/usr/local/bin/account mailbox add -l"
+ mailusr +" -d/home/rootkid/Mail/" + mailusr +" -p"
+ self._word_convert_4shell(word=acc['passwd']),
shell=True,stdout=sys.stdout,stderr=sys.stderr)
Code: Alles auswählen
saveout=sys.stdout
saveerr=sys.stderr
log_stdout=open("/home/kounity/applogs/stdout.log","w")
log_stderr=open("/home/kounity/applogs/stderr.log","w")
sys.stdout=log_stdout
sys.stderr=log_stderr
Bin für jeden Tipp sehr dankbar!
LG,
Pascal