Seite 1 von 1
shutil.copyfile geht nicht mit asterisk
Verfasst: Donnerstag 9. November 2017, 15:38
von sunshineh
Hi,
ich habe für asterisk ein Call-File erstellt. Das funktioniert auch, wenn ich über das Terminal folgenden befehl als root eingebe, klingeln die Telefone:
Code: Alles auswählen
mv /home/pi/klingel_all.call /var/spool/asterisk/outgoing/
In meinem Python Skript heißt es:
Code: Alles auswählen
callfilepfad = "/home/pi/klingel_all.call"
...
shutil.copyfile(callfilepfad,'/var/spool/asterisk/outgoing/anruf.call')
(eine anruf.call hab ich aber nicht)
Es funktioniert auch nicht, wenn ich folgendes schreibe
Code: Alles auswählen
shutil.copyfile(callfilepfad,'/var/spool/asterisk/outgoing/')
In beiden Fällen bleibt der Code dann dort stehen. Kann ich irgendeinen Rückgabewert abfragen, um herauszufinden, woran es liegt?
Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Donnerstag 9. November 2017, 16:06
von Sirius3
@sunshineh: Was heißt "der Code bleibt dort stehen"?
Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Donnerstag 9. November 2017, 16:55
von sunshineh
Ich meine, ich habe nach dieser Zeile eine Printmeldung eingefügt, diese wird aber nicht mehr ausgegeben.
Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Donnerstag 9. November 2017, 17:13
von Sirius3
Um was für eine Datei handelt es sich bei `/home/pi/klingel_all.call`?
Das äquivalent zum Shell-Befehl wäre:
Code: Alles auswählen
os.rename(callfilepfad, '/var/spool/asterisk/outgoing/anruf.call')
Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Donnerstag 9. November 2017, 17:30
von sunshineh
Was soll da passieren? Es ändert sich nichts.
Wird da auch das File in den Pfad kopiert?
Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Donnerstag 9. November 2017, 18:19
von kbr
@sunshineh: Sirius3 hat das Python-Pendant zu Deinem Eingangs verwendeten 'mv' Befehl auf der Shell verwendet. Daher sollte auch das gleiche geschehen. Wenn Du hinter diese Anweisung ein 'print()' einfügst, wird dieses entweder ausgeführt, oder die vorhergehende Anweisung (os.rename) wirft eine Ausnahme. Dann siehst Du den entsprechenden Traceback. Also, irgendwas wird bei Dir schon geschehen.
Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Freitag 10. November 2017, 09:34
von sunshineh
Bei mir kam keine Rückmeldung, keine Ausnahme/Fehlermeldung. Ich bin einfach nicht zur nächsten print-Ausgabe gekommen.
Wenn ich das Skript mit sudo ausführe, geht es!! Ich könnte mich so ärgern, dass ich das nicht gleich versucht habe...

Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Freitag 10. November 2017, 10:42
von snafu
Wenn es irgendwelche Probleme mit Berechtigungen bei Dateioperationen gibt, dann reicht Python einem das als Fehlermeldung durch. Dass es dazu schweigt, ist ziemlich unwahrscheinlich, weil so doof sind die Python-Programmierer eigentlich nicht. Falls du dir sicher bist, dass es keine andere Ursache gibt, dann solltest du dies als Problembericht (Issue) einreichen. Denn sowas sollte nicht vorkommen.
Re: shutil.copyfile geht nicht mit asterisk
Verfasst: Freitag 10. November 2017, 11:24
von Sirius3
@sunshineh: das kann nicht sein. Wenn man versucht, eine Datei in ein Verzeichnis zu verschieben, auf das man keine Berechtigung hat, kommt eine Fehlermeldugn:
Code: Alles auswählen
>>> os.rename('test.txt','/root/test.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 13] Permission denied
ebenso bei shutil:
Code: Alles auswählen
>>> shutil.copyfile('test.txt','/root/')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/shutil.py", line 83, in copyfile
with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: '/root/test.txt'