@pystartup: Das '^' Zeichen zeigt bei Syntaxfehler normalerweise an die Stelle wo der Compiler bemerkt hat, dass etwas nicht stimmen kann. Das ist normalerweise also irgendwo nach dem Fehler, oder anders herum betrachtet, der Fehler liegt irgend wo davor. Schauen wir in einer Python-Shell mal ob er in der Zeile liegt die im Traceback steht (nachdem den verwendeten Namen ein Wert zugewiesen wurde, damit es keinen `NameError` gibt).
Code: Alles auswählen
In [2]: v_nachname, v_vorname, v_email, v_login = 'xxxx'
In [3]: pipe = subprocess.Popen(['perl', '/.AddUser.pl', '-l' v_nachname, '-f' v_vorname, '-p' '123', '-e' v_email, v_login], stdout=subprocess.PIPE)
File "<ipython-input-3-354b7ac71e6d>", line 1
pipe = subprocess.Popen(['perl', '/.AddUser.pl', '-l' v_nachname, '-f' v_vorname, '-p' '123', '-e' v_email, v_login], stdout=subprocess.PIPE)
^
SyntaxError: invalid syntax
Mal sehen ob man es auf die Liste eingrenzen kann, die als erstes Argument übergeben wird:
Code: Alles auswählen
In [4]: ['perl', '/.AddUser.pl', '-l' v_nachname, '-f' v_vorname, '-p' '123', '-e' v_email, v_login]
File "<ipython-input-4-b639d5f5a03c>", line 1
['perl', '/.AddUser.pl', '-l' v_nachname, '-f' v_vorname, '-p' '123', '-e' v_email, v_login]
^
SyntaxError: invalid syntax
Ja, da scheint ein Fehler drin zu sein. Also die einzelnen Audrücke testen, welche die einzelnen Elemente der Liste stellen:
Code: Alles auswählen
In [5]: 'perl'
Out[5]: 'perl'
In [6]: '/.AddUser.pl'
Out[6]: '/.AddUser.pl'
In [7]: '-l' v_nachname
File "<ipython-input-7-a3a3952e3000>", line 1
'-l' v_nachname
^
SyntaxError: invalid syntax
Da haben wir es: Der Compiler hat keine Ahnung was er mit einer literalen Zeichenkette direkt gefolgt von einem Namen machen soll. Was sollte das denn auch bedeuten, also welches Ergebnis würdest Du von diesem Ausdruck erwarten? Es sollen ja zwei einzelne Elemente der Liste sein. Und Listenelemente werden in einer literalen Liste durch Kommas getrennt.
Man muss sich hier klar machen, dass der Rechner dumm ist. Der denkt nicht mit, kann sich also nicht denken was gemeint sein könnte. Er kann nur stur einem festen Satz an formalen, präzisen Regeln folgen, sowohl was die Syntax angeht, als auch den Programmablauf.
Zum `v_`: `f`, `reader`, `pipe`, und `result` sind auch Variablen. Das könnte man also so ziemlich überall davor setzen wo man einem Namen einen Wert zuweist. Das ist keine Information die dem Leser wirklich etwas bringt. Und da `v_` auch nichts allgemein bekanntes ist, müsste man es auch noch zusätzlich erklären.