Subprocess

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
Flo89
User
Beiträge: 9
Registriert: Donnerstag 3. September 2015, 19:51

Hallo Leute,

ich bin neu hier im Forum und habe folgendes Problem:
Das hier ist mein Code.

from subprocess import *

# Links to Tools
open_mafft = "C:/Users/Public/Desktop/Cygwin64 Terminal.lnk"


# Opens up the Tool
p = Popen([open_mafft,"mafft C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fasta > C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fa"], shell=True)
print (p.returncode)


Wenn ich das Programm über dieses Python Skript ausführe, gibt es die Fehlermeldung, das die Datei nicht gefunden wurde ( "Failed to run -: No such file or directory")

Komischerweise habe ich die Pfade mehrfach überprüft ! Wenn ich das Programm manuell start mit

mafft C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fasta > C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fa

starte funktioniert alles einwandfrei.

Habt ihr Idee woran das liegen könnte ?

Flo
Benutzeravatar
sparrow
User
Beiträge: 4144
Registriert: Freitag 17. April 2009, 10:28

Naja, das ist irgendwie nicht das Selbe.

Subprocess.Popen übergibst du einen einen Pfad zu einer lnk-Datei als ersten Parameter, bei dem manuellen Start nicht.

Ich weiß gar nicht ob das mit dem Aufruf von .lnk Dateien überhaupt klappt. Ersetz das mal durch den Pfad zu cygwin.

Dann: Wo hast du denn die manuelle Eingabe versucht? Windows Eingabeaufforderung oder Cygwin?
Flo89
User
Beiträge: 9
Registriert: Donnerstag 3. September 2015, 19:51

Hi,

danke für deine Antwort.
Ich hab das manuell probiert mit Cygwin.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Wahrscheinlich faßt Cygwin "mafft C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fasta > C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fa" als Dateinamen auf.

Richtig wäre ja:

Code: Alles auswählen

with open("C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fa", "wb") as out:
    p = Popen([open_mafft, "mafft", "C:/Users/Florian/Desktop/ortholog_group_ABAYE3633.fasta"], stdout=out)
    p.wait()
    print (p.returncode)
Aber das dürfte wahrscheinlich nicht funktionieren, weil Cygwin ein eigenes Fensterchen öffnet, und damit stdout nicht umleitbar ist. Bleibt, die Zeile in ein Shell-Skript zu schreiben und dieses zu starten.
Flo89
User
Beiträge: 9
Registriert: Donnerstag 3. September 2015, 19:51

Ja, da hast du recht. Das geht leider nicht.

Wenn ich das Programm starte öffnet sich Cygwin in seiner eigenen Shell.
Antworten