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, 18:31

Hallo,
ich möchte mir ein Programm schreiben, mit dem ich Mozilla öffne, ihm als Argument die Internetseite übergebe und anschließend noch zwei weitere Argumente: Benutzername und Passwort. Das wollte ich mit dem Modul 'subprocess' realisieren.
Ich kann allerdings als Argumente nur den Exe-File von Mozilla und ein optionales Argument übergeben, das hier die Internetseite sein muss. Weitere Argumente zu übergeben ist nicht möglich.

Hat da jemand eine Idee, wie man das machen könnte?

(Es geht hier im Übrigen um KEIN Knackprogramm, sowas mache ich nicht. Ich will mich nur automatisch auf einer Seite einloggen...)

Grüße Markus :)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. Januar 2008, 18:39

Markus12 hat geschrieben:Weitere Argumente zu übergeben ist nicht möglich.
Wieso? Fehlermeldung? Code?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 19:56

Hier ist ein Beispielcode:

Code: Alles auswählen

Popen(executable=r'C:\Programme\Mozilla Firefox\firefox.exe', args='"%s" "%s" "%s"' %('www.web.de', 'thomas12', 'hallo123'))
(*Daten sind ausgedacht*)

Das habe ich allerdings erst eben bemerkt, dass man den Exe-File bei executable machen sollte.

Bis jetzt habe ich es immer so gemacht:

Code: Alles auswählen

Popen('"%s" "%s"' %(r'C:\Programme\Mozilla Firefox\firefox.exe', 'www.google.de')
Hier im letzten Beispiel halt ohne zusätzliche Argumente, nur Exe-File und Internetseite...

Hat da jemand vielleicht eine Lösung?
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 20:01

Fehlermeldung gibt es nicht. Das einzige, was aber passiert ist, dass Firefox geöffnet wird, beim 1. Beispiel werden 2 Seiten geöffnet mit einmal www.thomas12.de und einmal eine Seite mit www.hallo.123.de^^

Keine Ahnung warum...
Das sind halt Seitenladefehler...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 11. Januar 2008, 20:15

Versucht doch mal ``Popen([r'C:\Programme\Mozilla Firefox\firefox.exe', 'seite'], sonstige_parameter)``.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Freitag 11. Januar 2008, 20:18

Sag mal, hast du dir die Dokumentation zu subprocess überhaupt durchgelesen? "executable" verwendet man eigentlich nicht, und args sollte besser eine Liste sein:

Code: Alles auswählen

subprocess.Popen(['C:\Programme\Mozilla Firefox\firefox.exe', username, password])
Was dein eigentliches Problem angeht: Das lässt sich wohl nicht so lösen.

Ich würde einfach den eingebauten Passwort-Manager nutzen, und das Passwort darin ablegen.
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 20:23

Ich habe auch gelesen, dass man executable ebenso verwenden kann, oder den Exe-file als erstes Argumente übergibt!
Ich werde es mal versuchen, danke!
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 20:40

@lunar:
Außerdem steht dort, dass man einen String oder eine Sequenz übergeben kann, du müsstest doch wissen, dass auch ein Tuple eine Sequenz ist ;)

Ich habe zwar nicht die Dokumentation, aber dafür eine andere englische Erklärung gelesen, glaube sogar, dass es daraus entnommen war...
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 20:46

Leonidas hat geschrieben:Versucht doch mal ``Popen([r'C:\Programme\Mozilla Firefox\firefox.exe', 'seite'], sonstige_parameter)``.
Ich habe mir schon gedacht, dass das nicht funktioniert, denn dein Argument "sonstige_parameter" müsste eine Integer sein, damit es funktioniert, weil bufsize gefragt war...
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 20:49

@lunar:

Code: Alles auswählen

subprocess.Popen(['C:\Programme\Mozilla Firefox\firefox.exe', username, password])
Dein Code kann auch nicht gehen, da die Internetseite nicht verbaut wurde...
BlackJack

Freitag 11. Januar 2008, 20:54

@Markus12: Ja auch ein Tupel ist eine Sequenz. Das hast Du aber auch nicht gemacht.
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 21:04

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*
BlackJack

Freitag 11. Januar 2008, 21:51

Du solltest besser davon ausgehen das gerold in den meisten Fällen weiss wovon er spricht. :-)

Wenn man den Programmnamen und die Argumente in einer Sequenz übergibt, wird das Programm mit genau dieser Liste an Argumenten *direkt* aufgerufen und eben gerade *nicht* über den Umweg über eine Zeichenkette und eine Shell die diese Zeichenkette dann wieder in einzelne Argumente aufteilt. Wobei man dann aufpassen muss, wie die Shell das macht und das Zeichen mit spezieller Bedeutung für die Shell entsprechend "escape"t werden.

Welche Shell? Das ist abhängig vom Betriebssystem und welche Shell der jeweilige Benutzer eingestellt hat. Damit ist nicht einmal sicher welche Zeichen man wie "escape"n muss. Ist also eindeutig die schlechtere Wahl gegenüber der Sequenz und der direkten Übergabe der Argumente.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 11. Januar 2008, 22:00

BlackJack hat geschrieben:Du solltest besser davon ausgehen das gerold in den meisten Fällen weiss wovon er spricht. :-)
Hallo BlackJack!

Danke! Aber diesmal bin ich unschuldig. :lol:

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

Freitag 11. Januar 2008, 22:51

richtig, nicht gerold hat eine Antwort geschrieben, sondern du, BlackJack, und lunar *g*
Antworten