Aus Script neues Script starten.

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    ich habe aktuell das Problem, dass ich gerne aus meinem Python Script ein weteres aufrufen würde. Diese sollen dan Paralell laufen. Ich habe diese beiden varianten versucht:
    [code=php]
    script_standad = "/home/pi/Documents/testPID.py"

    os.system(script_standad)

    # Oder:

    subprocess.Popen(script_standad, shell=True)
    [/php]

    Leider Bekomme ich bei beiden die meldung "Konnte Dateipfad oder Datei nicht finden". Aber der Pfad ist richtig! Ich häng da jetzt schon einen Tag dran.

    ich habe die Datei mit chmod +x ausfürbar gemacht und die rechte mit chmod 755 vergebn.

    jemand eine Idee woran das liegen könnte? Oder eine andere Lösung?

  • Ausführbar machen reicht nicht, wenn die Datei keinen Shebang besitzt weiß die Shell nicht was den Code verarbeiten soll

    Auf die Art wirst du es aber auch nicht "parallel" ausführen können da dein main-Script dann so lange blockiert wird bis das Ausführen beendet wurde - eben wie ein Shellbefehl.

    Was steht denn im testPID.py drin? Wieso soll das parallel laufen? Kannst du das nicht ins main-Script importieren und dort dann die gewünschte Funktion bei bedarf ausführen? :s

  • Hi,


    ... wenn die Datei keinen Shebang besitzt weiß die Shell nicht was den Code verarbeiten soll
    ...


    meigrafd: das stimmt jetzt leider nur teilweise ...
    ohne den Hash-/She-bang wird ein script (zumindest in der bash und in der sh unter Linux auf dem RPi) als shellscript interpretiert und entsprechend ausgeführt.
    Dabei spielt es keine Rolle, ob die Datei .py, .sh oder .irgendwas heisst.

    Aber das mit dem Import wie meigrafd es anspricht, würde ich an Deiner Stelle mal ausprobieren (das Mann hat Ahnung)

    cu,
    -ds-

  • Goldwaage schlägt wieder zu?

    Code
    root@strudel:/tmp# echo 'print "bla"' > test
    root@strudel:/tmp# chmod +x test
    root@strudel:/tmp# ./test 
    Warning: unknown mime-type for "bla" -- using "application/octet-stream"
    Error: no such file "bla"
    root@strudel:/tmp#

    Sieht das so aus als würde es wie vorgesehen funktionieren? :-/ :s

    Wenn man aber - wie von mir erwähnt einen Shebang setzt - sieht das anders aus:

    Code
    root@strudel:/tmp# echo -e '#!/usr/bin/python\nprint "bla"' > test    
    root@strudel:/tmp# chmod +x test
    root@strudel:/tmp# ./test 
    bla
    root@strudel:/tmp#

    ...und natürlich gehts auch die Datei direkt an den Interpreter zu übergeben...

  • Hi,


    ...
    Warning: unknown mime-type for "bla" -- using "application/octet-stream"
    ...
    Sieht das so aus als würde es wie vorgesehen funktionieren? :-/ :s
    ...


    richtig! Die shell ruft einen print auf, der logischerweise fehlschlägt:

    Code
    pi@raspberrypi ~ $ 
    pi@raspberrypi ~ $ print "bla"
    Error: no such file "bla"
    Code
    pi@raspberrypi ~ $ echo 'print "bla"' > test
    pi@raspberrypi ~ $ chmod +x test
    Code
    pi@raspberrypi ~ $ ./test
    Error: no such file "bla"
    pi@raspberrypi ~ $

    na ... fällt der Groschen ;) ...
    Soviel zum Thema Goldwaage

    cu,
    -ds-

  • Der Groschen war schon vorher bekannt. Beachte bitte den Zusammenhang meiner gemacht Aussage und dem Problem..

    Datei zwar ausführbar aber kein Shebang -> es wird beim ausführen nicht von python verarbeitet. Aber das möchte der TE hier in diesem Thread.


    hab nicht mehr so viel Lust immer jeden Post den ich schreibe mega ausführlich zu machen damit keine Goldwaagenleger-Beiträge diskutiert werden müssen... root hat mir zuletzt bereits den letzten Nerv geraubt.

  • Das hier:


    Ausführbar machen reicht nicht, wenn die Datei keinen Shebang besitzt weiß die Shell nicht was den Code verarbeiten soll
    ...


    war Deine Aussage. Und die ist halt definitiv falsch.
    Und das war auch das, was ich kritisiert habe:


    meigrafd: das stimmt jetzt leider nur teilweise ...
    ohne den Hash-/She-bang wird ein script (zumindest in der bash und in der sh unter Linux auf dem RPi) als shellscript interpretiert und entsprechend ausgeführt.
    Dabei spielt es keine Rolle, ob die Datei .py, .sh oder .irgendwas heisst.


    Also schmeiss hier nicht irgendwas durcheinander sondern zeig mal Format und sag: sorry, stimmt ... habe ich nicht gewusst ... statt das wieder zu verwässern.

    cu,
    -ds-


  • Poste doch mal die Ausgabe von:

    Code
    pi@raspberrypi ~ $ ls -l /home/pi/Documents/*.py
    Code
    -rwxr-xr-x 1 root root 2713 Apr 29 20:40 /home/pi/Documents/LED_control.py
    -rwxr-xr-x 1 root root  170 Mai  3 18:20 /home/pi/Documents/testPID.py
    -rw-r--r-- 1 root root 7482 Mai  3 17:59 /home/pi/Documents/testXML.py
    Zitat von meigrafd

    Ausführbar machen reicht nicht, wenn die Datei keinen Shebang besitzt weiß die Shell nicht was den Code verarbeiten soll

    Als Shebang habe ich:

    Code
    #!/usr/bin/env python3

    Ich habe jetzt eine Möglichkeit gefunden bei der ich das Paralele ausführen nicht mehr brauche. Aber es würde mich dennoch interessieren warum das nicht geht...

  • BlueDogi: Dein subprocess.Popen() ist falsch. Schau dir das Modul noch mal genau an.

    Script-1: test.py

    Code
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    
    
    print 'test'

    Script-2: start.py

    Mit python start.py wird das Skript test.py ohne Schwierigkeiten ausgeführt.

Jetzt mitmachen!

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