unix kommandos in python script

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.
Antworten
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

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
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Code: Alles auswählen

'Hallo %s' %('Welt')
Das sollte doch gehen, oder?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Du solltest besser [mod]subprocess[/mod] nutzen, da hast du dann eh alles als Liste.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

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 ?
uwe76
User
Beiträge: 4
Registriert: Mittwoch 4. November 2009, 12:44

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
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

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!
Benutzeravatar
Klip
User
Beiträge: 98
Registriert: Donnerstag 10. August 2006, 20:39

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:]
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Warum eigentlich 2.3?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

... das kommt davon das gewisse Leute meinen sie müßten ReHat 4 noch laufen lassen ;-)
Antworten