Seite 1 von 1

unix kommandos in python script

Verfasst: Mittwoch 4. November 2009, 12:50
von may24
Hallo zusammen,

ich screibe gerade ein python Script das diverse unix Programme aufruft.
Das Programm son nacheinander mit verschidenen Argumenten aufgerufen werden.

z.B.

Code: Alles auswählen

import os
import sys

def CallAll(ne):
      output = os.popen('execcli -f -n ne')
      for i in output.readlines():
           print i


... soweit ein Auszug. Das Problem liegt hier auf der Hand, denn ich muß irgentwie "ne" übergeben. Nur wie? os.popen behandelt "ne" nicht als Argument sondern als festen Parameter der sich nicht ändern läßt.

Ich weiß Google ist dein Freund, aber ich habe noch das weitere Problem, das mir z.Z nur Python 2.3 zur Verfügung steht. Also nix mit subprocess ...

Ein Beispiel das ich gefunden habe benutzte sowas wie %(ne) aber das sieht der Python Interpreter gar nicht gerne ...

Jemand 'ne Idee?
TIA

Verfasst: Mittwoch 4. November 2009, 13:09
von jbs

Code: Alles auswählen

'Hallo %s' %('Welt')
Das sollte doch gehen, oder?

Verfasst: Mittwoch 4. November 2009, 13:20
von Rebecca
Du solltest besser [mod]subprocess[/mod] nutzen, da hast du dann eh alles als Liste.

Verfasst: Mittwoch 4. November 2009, 13:50
von may24
Rebecca hat geschrieben:Du solltest besser [mod]subprocess[/mod] nutzen, da hast du dann eh alles als Liste.
Wie schon gesagt, ich habe nur Python 2.3 zur Verfügung. Subprocess gibt es aber erst ab 2.4

@jbs ok, aber wie soll ich das beim oben genannten Aufruf von so.popen( ... einbauen ?

Verfasst: Mittwoch 4. November 2009, 14:06
von uwe76
Hallo may24,

wie wär's z.B. mit:

Code: Alles auswählen

cmd = 'execcli -f -n %s' % str(ne)
output = os.popen(cmd) 
Gruß
Uwe

Verfasst: Mittwoch 4. November 2009, 14:24
von may24
Ja !! So ähnlich hat es jetzt auch funktioniert.

Ich habe den cmd String nur etwas anderst zusammengebaut:

Code: Alles auswählen

cmd = 'execcli -f -n ' + ne
output = os.popen(cmd) 
Ein Punkt worüber ich die ganze Zeit gestolpert bin war, das ich "ne" über sys.argv einlese. Und das ist bekattlich eine Liste.
Wandelt man die in einen String um, so hat man nicht nur das Argument sondern argv[0] = das Script selbst.

Aber jetzt funktioniert es. Vielen Dank nochmal an Alle!

Verfasst: Mittwoch 4. November 2009, 14:33
von Klip
may24 hat geschrieben: Wandelt man die in einen String um, so hat man nicht nur das Argument sondern argv[0] = das Script selbst.
Du kannst natürlich auch nur Teile von argv auslesen : D

Code: Alles auswählen

arguments = sys.argv[1:]

Verfasst: Mittwoch 4. November 2009, 15:35
von jbs
Warum eigentlich 2.3?

Verfasst: Mittwoch 4. November 2009, 16:21
von may24
... das kommt davon das gewisse Leute meinen sie müßten ReHat 4 noch laufen lassen ;-)