Problem mit Shell-Kommando

05/03/2009 - 10:43 von Markus Kersten | Report spam
Hallo,

ich habe vor kurzem angefangen, mich mit Python zu beschàftigen, bin also
noch Anfànger.
Zur Übung habe ich versucht ein Python-Script zu schreiben, welches auf
einem Linux-Server für die Zarafa-Groupware einen gültigen Benutzer
anlegt.
Der Shell-Befehl dafür lautet:
root@server:>zarafa-admin -c neueruser -f 'Voller Name' -e 'email@domain.de' -p Passwort

Mein Python-Script sieht jetzt (verkürzt) so aus:

#!/usr/bin/python

import os

def userInput():
# Globale Variablen fuer Benutzer
global fullName, userName, eMail, provPasswd
# Benutzerdaten einlesen
fullName = raw_input('Geben Sie den vollstaendigen Namen ein: ')
userName = raw_input('Geben Sie den Usernamen ein: ')
eMail = userName+'@domain.de'
provPasswd = 'abcde'

def userAdd():
cmd = 'zarafa-admin -c %s -f %s -e %s -p %s' % (userName,fullName,eMail,provPasswd)
p = os.popen(cmd)
print p.readline()

userInput()
userAdd()

Ich erhalte folgende Fehlermeldung:
"Too many options given"
Der Shell-Befehl für Zarafa stimmt zu 100%.
Der Fehler liegt also in meinem Script.
Kann mir da jemand weiterhelfen?

Gruß...Markus
 

Lesen sie die antworten

#1 Diez B. Roggisch
05/03/2009 - 12:23 | Warnen spam
Markus Kersten schrieb:
Hallo,

ich habe vor kurzem angefangen, mich mit Python zu beschàftigen, bin also
noch Anfànger.
Zur Übung habe ich versucht ein Python-Script zu schreiben, welches auf
einem Linux-Server für die Zarafa-Groupware einen gültigen Benutzer
anlegt.
Der Shell-Befehl dafür lautet:
:>zarafa-admin -c neueruser -f 'Voller Name' -e '' -p Passwort

Mein Python-Script sieht jetzt (verkürzt) so aus:

#!/usr/bin/python

import os

def userInput():
# Globale Variablen fuer Benutzer
global fullName, userName, eMail, provPasswd
# Benutzerdaten einlesen
fullName = raw_input('Geben Sie den vollstaendigen Namen ein: ')
userName = raw_input('Geben Sie den Usernamen ein: ')
eMail = userName+'@domain.de'
provPasswd = 'abcde'



Globale Variablen sind "pfui". In Python hast du verschiedene
Moeglichkeiten, die in einem solchen Fall zu umgehen.

Bei sowas einfachem wuerde ich tuple-unpacking nutzen:

fullName, userName, eEmail, provPasswd = userInput()
userAdd(fullName, userName, eMail, provPasswd)

Dann aenderst sich in userInput natuerlich was - das "global" faellt
weg, und stattdessen kommt ein return rein:

return fullName, userName, eMail, provPasswd


def userAdd():
cmd = 'zarafa-admin -c %s -f %s -e %s -p %s' % (userName,fullName,eMail,provPasswd)
p = os.popen(cmd)
print p.readline()

userInput()
userAdd()

Ich erhalte folgende Fehlermeldung:
"Too many options given"
Der Shell-Befehl für Zarafa stimmt zu 100%.
Der Fehler liegt also in meinem Script.
Kann mir da jemand weiterhelfen?



Zuerstmal solltest du statt os.popen subprocess verwenden. Und dann
statt eines Strings eine Liste uebergeben, denn jedes Shell-argument
steht ja fuer sich - den ganzen Zinnober mit Anfuehrungszeichen, so wie
du sie oben in der Shell benutzen musst, kann man sich dann sparen.

Undt ich denke auch, das genau das dein problem ist. Denn wenn du
fullName mit einem Leerzeichen drin so wie angegeben benutzt, werden das
aus shell-sicht zwei argument.

Also einfach

subprocess.call("zarafa-admin", "-c", userName, )


Diez

Ähnliche fragen