Variablenübergabe an Bash-Script

  • Hallo,
    ich ermittle in einem Python Script (mein erstes Python Script!) den aktuellen Stromverbrauch (über Anzahl Impuls des Stromzählers in einer bestimmten Zeit).

    Diesen Wert (Bsp: 1.45 in Variable KwhAct) möchte ich nun einem exitierendem Shell-Script (bash) als Parameter übergeben (als $1 sozusagen).

    Ich habe es hiermit (und anderen Varianten) versucht, aber bestenfalls erhalte ich im Zielscript nur den Text "KwhAct" anstatt dem Wert :(

    ...
    subprocess.call ("/root/testshell.sh KwhAct", shell=True)
    ...

    Was mache ich falsch?
    Aus der bash-Shell funktioniert die Übergabe des Parameters an testshell.sh, aber nicht aus Python ....

    Danke für Tipps!

    Einmal editiert, zuletzt von topsurfer (3. Dezember 2015 um 14:02)

  • cwmg: Müssen tut er das nicht :fies: Die von Tell genannte Version funktioniert auch ganz gut ;)

    Was allerdings bei der von dir genannten problematisch werden kann ist wenn es sich um eine Zahl handelt, dann würde das in der Form nicht funktionieren. Beispiel:

    Code
    KwhAct = 10
    subprocess.call(["echo", KwhAct])

    Das würde einen Fehler ausgeben.
    In Python2 würde der Fehler wie folgt aussehen:

    Code
    TypeError: execv() arg 2 must contain only strings

    In Python3:

    Code
    TypeError: Can't convert 'int' object to str implicitly

    Würde man das aber wie folgt machen:

    Code
    KwhAct = 10
    subprocess.call(["echo", str(KwhAct)])

    Würde es funktionieren.

    In diesem Fall macht es halt einen Unterschied ob man den Parameter selber festlegt, oder mithilfe einer Variablen...
    Deshalb würde das auch problemlos funktionieren:

    Code
    subprocess.call(["echo", "10"])
  • Hallo,
    das funktioniert, vielen Dank!

    subprocess.call ("/root/testshell.sh %f" % KwhAct, shell=True)

    Aber wie kann ich auch eine weitere (Bsp. MinuteAvg) Variable übergeben? Letztlich sind es vier Zahlenwerte.
    Habe ein wenig getestet, aber ohne Erfolg.

    Hinweis:
    Der Ansatz bringt Fehler (so was hatte ich zuvor auch im WWW schon gefunden):
    subprocess.call(["/root/testshell.sh", KwhAct])


    PS: Warum kann ich im Editor keinen Text als Code markieren, oder muss man das händig taggen?

    Einmal editiert, zuletzt von topsurfer (3. Dezember 2015 um 15:02)


  • Aber wie kann ich auch eine weitere (Bsp. MinuteAvg) Variable übergeben? Letztlich sind es vier Zahlenwerte.
    Habe ein wenig getestet, aber ohne Erfolg.

    Dann machst du das einfach so:
    [code=php]
    subprocess.call("/root/testshell.sh %f %f %f %f" % (eins, zwei, drei, vier), shell=True)
    [/php]

    Und am besten liest du dir auch noch folgendes durch um zu verstehen was es mit %f aufsich hat: https://docs.python.org/2.4/lib/typesseq-strings.html

    Denn ich würde es lieber so machen:
    [code=php]
    subprocess.call("/root/testshell.sh %s %s %s %s" % (eins, zwei, drei, vier), shell=True)
    [/php]

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!