Modul '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.
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 22:52

mhhh, aber wie kann ich das jetzt lösen?
lunar

Freitag 11. Januar 2008, 22:55

Markus12 hat geschrieben:ja stimmt, da habe ich mich vertan, aber ich brauche auch keine Sequenz zu übergeben. ER hat glaube ich nicht die Doku gelesen, da steht nämlich, dass wenn man eine Sequenz übergibt, diese dann automatisch zu einem String konvertiert wird! Also brauche ich keine Liste *lach*
Das ist in dieser Form einfach nur Unsinn!

Unter Linux stimmt das schon mal gar nicht, dort wird bei einem Aufruf mit einer Liste ge"fork"ed und anschließend im Kind-Prozess "execvp" ausgeführt. Das lädt die ausführbare Datei direkt in den Speicher der aktuellen Anwendung. Das funktioniert ohne Strings. Schon allein deswegen sollte man niemals einen String verwenden. Das führt nämlich unter Linux dazu, dass der gesamte(!) String als ein Argument angesehen wird, so dass dein bisheriger Weg (das zweite Beispiel in deinem Posting) niemals zum Erfolg führen kann!

Ein String kannst du nur dann sinnvoll verwenden, wenn du shell=True setzt. Wer das allerdings in seinem Programm macht, hat das Aufrufen von Kindprozessen absolut nicht verstanden. Da spielen nämlich alle Shell-Quoting Regeln mit, so dass eine geschickt eingeschleuste Nutzereingabe "unerwünschte" Nebeneffekte haben kann...

Unter Windows ist es richtig, dass (weil die WinAPI so bescheuert designed wurde) die Liste in einen String konvertiert wird. Allerdings mit einer speziellen Funktion, die sich um das (zumindest für die MS C Runtime) korrekte Escaping der übergebenen Argumente. Du machst kein Escaping, deine simple Tupel-Methode schlägt völlig fehl, sobald auch nur ein Anführungszeichen im Passwort vorkommt.

Wie du das Problem lösen kannst, weiß ich nicht. Firefox nimmt Passwort und Nutzername nicht auf der Kommandozeile entgegen (das wäre bei Web-Form-Logins auch gar nicht vernünftig zu realisieren). Folglich ist das Ganze hier OT. Schau mal auf der Firefox-Website nach...

Was die Verwendung des subprocess-Moduls angeht, schau in die Doku, ansonsten haben Leonidas und ich schon die korrekten Beispiele gepostet.

@gerold
Gib doch endlich zu, dass du meinen Account gecrackt hast, und hier unter falschem Namen unsinniges Zeug verbreitest ;) BlackJack hat dich durchschaut!
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Samstag 12. Januar 2008, 18:21

Ok danke, werde mich damit weiter beschäftigen...
Antworten