Python, mach was ich will!!

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Leute,

    ich habe ein kleines Problem mit Python und bräuchte kurz Hilfe, da ich noch neu bin! :)

    Folgendes Python skript möchte ich auf meinem Raspi ausführen:

    #!/usr/bin/python
    import os
    message = "Hi Joni"
    os.system('python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX message ')


    allerdings interpretiert er nicht den variablen sondern message als zeichenkette.

    Kann mir bitte jmd sagen was ich falsch mache! :)


  • os.system('python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX message ')

    Code
    os.system('python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX' +  message)
  • Also erstmal ist os.system schon überholt und wird künftig nicht mehr unterstützt. Benutzt stattdessen subprocess

    Und um eine Variable anzufügen musst du erstmal den Bereich mit dem Shellbefehl abschließen und dann wieder mit python-code weiter machen...

    Also du benutzt zZt:

    Code
    os.system('python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX  message')

    Dh alles in den ' ' beinhaltet den Shellbefehl Teil..

    Abgrenzen kannst du auf verschiedene Weisen erreichen

    Den Shellbefehl vom python trennen könntest du zum Beispiel so:

    Code
    message="Hi Joni"
    os.system("python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX 'message'")

    Oder andersherum gehts natürlich auch:

    Code
    message="Hi Joni"
    os.system('python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX "message"')

    Oder zum Beispiel indem du den Shellbefehl vorher definierst und dann die die python Variable anhängst:

    Code
    message="Hi Joni"
    cmd="python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX "+message
    os.system(cmd)

  • Hmm da tut sich leider auch nichts


    Der + Operator verbindet Texte, seien es Konstanten oder Variablen. Da fehlte ein Leerzeichen bei meinem Vorschlag.

    Ich habe mal die vorgestellten Loesungen sowie deren Ergebnisse zur Verdeutlichung zusammengefasst: Da wirst Du sehen dass die erste und zweite sich geringfuegig unterscheidet durch das Leerzeichen und die zweite mit der fuenften syntaktisch fast gleich ist (Einmal ' als Texttrenner und einmal "). Das ist aber in Python gleichwertig. Es muss aber ein Leerzeichen zwischen der Konstanten 'echo' und der message sein.


    liefert

    Code
    sh: 1: echoHi: not found
    Hi Joni
    message
    message
    Hi Joni
  • Eure Ratschlaege sind ja gut und recht, aber ich vermute, er muss sein "Hi Joni" noch in Quotes setzen, weil es zwei Woerter sind.

    Also so:

    Code
    message="Hi Joni"
    os.system("python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX '" + message + "'")
  • Und ich sags immer wieder: Python is doof :D

    message="Hi Joni"
    cmd="python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX " + message
    os.system(cmd)

    Ist denk ich das einfachste

  • Ja ne is klar dbv... für print is das einfacher aber es geht darum die Python Variable an den Shell Befehl anzuhängen!
    Lies dir einfach mal den Thread vernünftig durch dann siehst du das Dein Beispiel das Thema verfehlt

  • Jupp. Genau darum geht es: Die Parameteruebergabe von Python ueber bash wieder zu Python. Bei mir laeuft leider das cli gerade nicht dass ich es testen kann. Aber dem Code nach muss bei '-s 4711 message' im Python die message ein bash Parameter sein. Der muss in " ... " stehen, wenn darin durch Leerzeichen getrennte Texte stehen. Deshalb muesste es

    Code
    message="Hi Joni"
     cmd="python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX \"" + message + "\""
     os.system(cmd)


    sein.

    echo verhaelt sich da etwas anders, da alle $1 bis $n ausgegeben werden und deshalb die " nicht unbedingt notwendig sind bei Texten mit Leerzeichen.

    • Offizieller Beitrag

    warum sollte sich print anders verhalten als os.system() oder subprocess? string replacement in python sollte mit % gemacht werden. so kann man strings schreiben und universell die variablen einschieben.

    das Beispiel ist perfekt, ein string ist string. Ob da nun Hallo jonni oder yowsup bla bla bla steht, spielt keine Rolle.

    Deine Belehrung ist also offensichtlich unangebracht.

    String Verkettung mit + ist einfach unschön.


  • ...String Verkettung mit + ist einfach unschön.


    Aber sehr intuitiv. Einfach Texte aneinanderhaengen.

    Code
    message="Hi Joni"
    cmd="python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX"
    os.system("%s \"%s\"" % (cmd, message))


    geht natuerlich auch. Ist aber phytonisch bzw c-isch:D

    • Offizieller Beitrag

    es geht sogar

    Code
    os.system("""%s %s""") %(cmd, message)

    sieht für mich schöner aus ;). Wenn man will das die variablen als string, wichtig bei sql statements, übergeben will setzt man sie zusätzlich in "", deswegen die Nutzung als Documentstring.


  • Eure Ratschlaege sind ja gut und recht, aber ich vermute, er muss sein "Hi Joni" noch in Quotes setzen, weil es zwei Woerter sind.

    Also so:

    Code
    message="Hi Joni"
    os.system("python /home/pi/Yowsup/yowsup-master/src/yowsup-cli -c /home/pi/Yowsup/yowsup-master/src/config.example -s 4917XXXXXXX '" + message + "'")

    Hallo Freunde,

    vielen Dank für die rege Beteiligung und die Hilfe! Ich bin sehr darüber erfreut und möchte jedem danken.
    Der obige Code ist die Lösung meines Problems, welche ich nun fortführen werde! :)
    Die davor hatten leider nicht geklappt und ich bin auch eher der Freund von knackigen Befehlen.
    Also nichts für ungut! :) und nochmals vielen Dank! :danke_ATDE:

  • Servus, hab den code wie beschrieben und er funktioniert auch mit festen werten.
    will ich mir aber zb die CPU Temp senden lassen,
    so kriege ich nur eine 0 geschickt.
    In der Konsole wird der Temperaturwert allerdings ausgegeben.

    gesamt sieht's so aus

    Code
    message=os.system("vcgencmd measure_temp")
    
    
    cmd="python /home/pi/yowsup-master/yowsup-cli demos -c /home/pi/yowsup-master/yowsup/config -s 49176xxxxxxxx"
    os.system("%s \"%s\"" % (cmd, message))
    GPIO.output(4, False)

    Hat jemand eine Idee?

    LG
    Alex

  • Wenn ihr einfasch nur die CPU Temperatur haben wollt, dann verzichtet am besten auf vcgencmd... Das verursacht dafür selbst zu viel Last.

    Verwendet stattdessen folgende virtuelle Datei: /sys/class/thermal/thermal_zone0/temp

    [code=php]
    def get_temperature():
    "Returns the CPU temperature in degrees C"
    with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
    content = f.read().splitlines()
    return float(content[0]) / 1000.0
    [/php]

    Ausserdem ist os.system veraltet und sollte nicht mehr benutzt werden. Nutzt stattdessen subprocess

Jetzt mitmachen!

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