Hi,
ich muss ein Programm mehrere tausend mal für unterschiedliche Input-Dateien aufrufen und habe versucht das durch ein Python-Skript zu machen. Das Problem ist, für ca. 1/3 aller Dateien funktioniert der Aufruf nicht (das Programm beschwert sich über fehlerhafte Input-Dateien - wenn ich das Programm ganz normal, ohne Python-wrapper, aufrufe, funktioniert alles ohne Probleme...). Der Fehler ist reproduzierbar, es sind immer die selben Input-Dateien für die der Aufruf nicht funktioniert.
Ich habe es bislang mit os.system() und subprocess.Popen() versucht:
os.system("formatdb -i " + filename)
subprocess.Popen(["formatdb", "-i", filename]).wait()
hat irgendjemand eine Idee was dieses seltsame Programmverhalten verursachen könnte ?
Subprocesses in Python
Ist an den Dateien irgend etwas besonderes? Zum Beispiel am Dateinamen? Kann man dem Programm keine präzisere Fehlermeldung entlocken?
Die Fehlermeldung die auftaucht sieht so aus:
[formatdb] WARNING: Cannot add sequence number 246 (lcl|246_profiles/Pfam-B_34) because it has zero-length.
Wie gesagt, wenn ich das Programm ganz normal aufrufe (also in diesem Fall einfall in der Shell "formatdb -i profiles/Pfam-B_34" ausführe) funktioniert es ohne Probleme (die Fehlermeldung ist für mich unverständlich denn es gibt keine "sequence with zero-length" in dieser oder irgendeiner anderen Datei).
[formatdb] WARNING: Cannot add sequence number 246 (lcl|246_profiles/Pfam-B_34) because it has zero-length.
Wie gesagt, wenn ich das Programm ganz normal aufrufe (also in diesem Fall einfall in der Shell "formatdb -i profiles/Pfam-B_34" ausführe) funktioniert es ohne Probleme (die Fehlermeldung ist für mich unverständlich denn es gibt keine "sequence with zero-length" in dieser oder irgendeiner anderen Datei).
Und wenn Du stattdessen folgendes in der Shell eingibst, geht's nicht!?
Wie sieht's hiermit aus?
Code: Alles auswählen
python -c 'import os; os.system("formatdb -i profiles/Pfam-B_34")'
Code: Alles auswählen
sh -c 'formatdb -i profiles/Pfam-B_34'
Bei os.system sollte man etwas vorsichtig sein, besonders wenn die Argumente des aufzurufenden Programms von Aussen kommen (injection vulnerabilities).
Es gibt das 'subprocess' Modul:
http://docs.python.org/library/subprocess.html
Insbesondere:
http://docs.python.org/library/subproce ... -os-system
Es gibt das 'subprocess' Modul:
http://docs.python.org/library/subprocess.html
Insbesondere:
http://docs.python.org/library/subproce ... -os-system