os.execv(sys.argv[0], sys.argv) ein Argument mitgeben

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.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Hallo Gemeinde, ich mal wieder mit einer Anfängerfrage

Das Python3 Script soll sich selbst neu starten, wenn der User das wünscht (Frage-Fenster).
Ich mache das mit:

Code: Alles auswählen

sys.stdout.flush()
os.execv(sys.argv[0], sys.argv)
Das funktioniert auch bestens.
Nun möchte ich aber dem Neustart des Scriptes ein Argument mitgeben.
Ich kann das Script mit test.py daniel starten und es übernimmt meinen Namen "daniel". Das funktioniert soweit auch.
Nun sollte os.execv(sys.argv[0], sys.argv) sich selbst auch wieder mit diesem (Namen) Argument neu starten.

Code: Alles auswählen

os.execv(sys.argv[0], sys.argv), "daniel"
funktioniert nicht. Er nimmt so das Argument, welches früher mitgegeben wurde. So auch, wenn ich das Script früher ohne Argument gestartet hatte, startet es auch wieder ohne Argument.
Wie muss ich das bewerkstelligen?
Zuletzt geändert von spicer am Freitag 29. April 2022, 23:29, insgesamt 1-mal geändert.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso glaubst du, das Skript neu zu starten, wäre die Lösung? Sowas kommt vor, aber so selten, dass ich das in mehreren Jahrzehnten Python an einer Hand abzählen kann, wie oft ich sowas gebraucht habe.

Bei dir sollte eine simple while Schleife oder Ähnliches reichen.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Verstehe Deine Einwände.
Es ist ein Game und ich will nicht so viel umschreiben für dieses zusätzliche Feature ^^
Die ganzen Arrays, Netzwerkverbindungen usw bleiben bei der while Schleife bestehen. Das will ich nicht.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ändert nichts an der Antwort. Ein Game hat eine hauptschleife in der es immer wieder auch auf den Anfang kommt. Warum kann deines das nicht haben?
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Egal.
Weisst eine Lösung, wie ich das auf diesem Weg bewerkstelligen kann?

PS:
Die Hauptschleife ist da bereits fertig. Das Spiel ist vorbei.
Ich will lediglich, dass der User per j oder n das Ganze nochmal starten kann, ohne das er das Script wieder von Hand aufrufen muss.

Eine andere Möglichkeit wäre, wenn ich die konstruierten Klassen destruktieren könnte, so dass __init__ wieder ausgeführt wird.....
Zuletzt geändert von spicer am Freitag 29. April 2022, 23:50, insgesamt 1-mal geändert.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Natürlich. Ich weiß auch, welches der beste Bohrer ist, um dir ein Loch ins Knie zu bohren. Helfe ich dir auch nicht bei.

Zeig deinen Code, und es findet sich garantiert ein Weg, ohne eine solche Krücke.

Und ein Objekt wird ganz einfach zerstört, wenn man es nicht mehr referenziert. Also zb einfach unter dem gleichen Namen ein neues anlegt. Eine Klasse hingegen ist schwieriger zu zerstören. Feiner aber wichtiger Unterschied.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Die 1100 Zeilen poste ich jetzt sicher nicht hier.
Sonst siehe hier:
https://github.com/ltspicer/GALAXIS.electronic

Und ich weiss, dass da nicht alles sauber gecodet ist wie von einem Profi!
Ist ja auch nur ein Hobby und zum Spass.
Ich verdiene meine Brötchen mit CNC Maschinen und nicht mit coden ;)
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Finde es ein tolles Forum hier.
Aber lasst mich mal eine Kritik anbringen. (nicht böse gemeint)
Alle hier haben riesig Ahnung von Python.
Das ist super.
Leider die meisten Fragesteller nicht. ...sonst würden die nicht fragen.
Genau das macht es aber schwierig, hier einen Rat zu bekommen.
Immer wird man darauf hingewiesen, dass das anders gelöst werden sollte.
Das artet dann in eine ganz andere Diskussion aus und am Schluss weiss der Fragesteller immer noch gleich viel.
Ich meine, wenn jemand eine Frage zu Problem X hat, sollte ihm zu Problem X geholfen werden und nicht wie man X besser anders schreiben sollte zBsp in Variante Y.

Wenn ein Code mir ins Knie schiesst, muss ich die Konsequenzen tragen und nicht derjenige, der mir diesen Lösungsvorschlag gegeben hat.

Es gibt viele andere grosse Foren, welche das gleiche Problem haben. ZBsp IHAD, ubuntuusers.de usw.
Ein riesiges Wissen häuft sich da. Aber vor lauter Perfektionismus wird da einem kaum noch geholfen. Das war vielleicht früher mal so.
In manchen Fällen artete der Thread sogar in eine Rechtschreibe-Stunde aus. Niemand merkte, dass das eigentlich offtopic wäre.
Schade für solch renomierte Foren.....
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Habe dieses Thema hier zur Sprache gebracht:
viewtopic.php?t=54663
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dein Ansatz ist halt Murks. Und wenn man Murks nicht unterstützen will, dann antwortet man eben nicht wie gewünscht. Ist ja schließlich alles eine freiwillige Angelegenheit hier. Fragestellern steht es frei, mögliche Verbesserungsvorschläge zu verweigern. Potenziell Helfenden steht es frei, ob sie dann noch konstruktiv antworten möchten. Wem das nicht passt, der kann sich gern nach kostenpflichtigem Python-Support umschauen, anstatt hier rumzumoppern. Just sayin'...

EDIT: Übrigens war es mitten in der Nacht und gerade mal ein User hat geantwortet. Wenn man daraus gleich so nen Abriss macht, scheint man ja schon länger einen Groll zu hegen.
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Ok Danke. Schade
Ich weiss, dass da viel Murks ist.
Leider haben die Profis vergessen, was Hobby/Spass ist.
Also vergiss meine Frage.
Ich werde eine Lösung finden.
Voll gebastel. Richtiger Murks.
#Was meinen Code angeht...geht Dich eig nichts an. # Heist, ich nerv mich gerade richtig
Danke trotzdem.
PS:
Muss denn immer aller nach Büchlein gelöst sein?

Genau solche Leute bringen die Menschheit nicht weiter. Im Gegenteil.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Kannst mir ja Deine Lösung per PN senden....
Weisst die denn?

Und fragenstellen verleidet einem schnell hier. Sorry
Ist ja gerade das, was ich gemotzt habe!
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Warum willst Du meine 1100 Zeilen Amateur Code sehn?
Das gibt Dir Augenkrebs!

Mein Vorschlag:
Forum schliessen.
Es gibt für professionelle IT Sachen Fachkurse. Foren sind tatsächlich vorbei.
Hmm. Habe selber eines.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Zumindest dein Main-Loop wäre interessant. Selbst wenn man die Funktionsaufrufe dann nicht nachvollziehen kann, bekäme man dennoch einen ersten Eindruck von der Struktur. Dann lässt sich besser sagen, wie du das Problem per Schleife lösen kannst. Und man würde natürlich eine Lösung mit subprocess anstreben, sofern das Skript tatsächlich neu aufgerufen werden muss.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe gerade mal im Forum von spicer nachgeschaut, wie denn da der Umgang miteinander ist, und ob es da fundamental besser läuft.

Und dann diese absolute Perle vom Meister spicer selbst gelesen: https://www.ltspiceusers.ch/threads/sim ... nsinn.276/

Das relevante Zitat:

” Ich finde, solche Leute sollten froh sein, wenn sie Feedbacks von Profis erhalten und diese zu Herzen nehmen.“


Und jetzt kann ich unter meiner Maske im ICE das Dauergrinsen nicht verkneifen.

Was für ein Großheuchler. Auf die Profis hören, aber nur, wenn man selber einer ist, oder einen das Thema eben interessiert. Ansonsten haben die Profis bitte den Anfänger bei seinem Murks zu unterstützen….!

🙃🤡
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

ok. lecxk mich am arsch
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

ok.
genau den thread von meinem ausgeflippten mod hast du gefunden.
schau mal das datum.
tat mir weh, musste den spicken damals!
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
Benutzeravatar
spicer
User
Beiträge: 52
Registriert: Freitag 5. März 2021, 23:40
Kontaktdaten:

Wenn Du wüstest, wie ein Admin da dazwischen steht.
Sehr...wie soll ich sagen. "Keine ahnung". Man sollte Diplomat sein.

Schlussendlich willst Du mir weh tun jetzt.
Alles klar...bin ich doch rauf gestanden....
Sorry. Bin halt direkt.
Wenn es mehrere Möglichkeiten gibt, eine Aufgabe zu erledigen, und eine davon in einer Katastrophe endet oder sonstwie unerwünschte Konsequenzen nach sich zieht, dann wird es jemand genau so machen. Alles, was schiefgehen kann, wird auch schiefgehen.
(Murphys Gesetz)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Wahrheit tut weh, wa? Da muss man dann schon ausfällig werden. Aber Umgang in Foren anmäkeln! Wird immer besser..
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@spicer: Ich habe nicht vergessen wie es war als ich noch Hobby-Programmierer war und ich verstehe diese Auffassung von „Hobby“ nicht. Die meisten Leute die ein Hobby haben, wollen sich mit dem Thema ihres Hobbys intensiv befassen und lernen und besser werden und nicht nur irgendwie irgendwas zum laufen bringen was mehr schlecht als recht funktioniert. Es gibt Hobby's da gibt es Gründe warum man immer unter professionellem Niveau bleiben wird, beispielsweise weil teure Ausrüstung gekauft werden müsste, die sich nicht lohnt wenn man das nur zum Spass macht. Aber beim Programmieren reicht ja im Grunde ein normaler Rechner aus und man kann fast alles machen.

Ich würde sagen es gibt keine einfache Lösung für Dein Problem wenn Du Dein Programm nicht deutlich überarbeiten willst, denn dort steht das Hauptprogramm mit Funktions- und Klassendefinitionen vermischt direkt auf Modulebene. Weshalb man da nicht einfach eine Schleife um das Hauptprogramm legen kann, um es mehrfach nacheinander ablaufen zu lassen.

Das auf Modulebene nur Code stehen sollte der Konstanten, Funktionen, und Klassen definiert, und eben nicht das Hauptprogramm und globale Variablen, ist ein Grundsatz der hier immer wieder Anfängern nahegelegt wird. Einen Grund dafür merkst Du jetzt gerade. Und es macht aus meiner Sicht, und da bin ich offensichtlich nicht alleine, total Sinn jeden Anfänger darauf hinzuweisen, auch wenn das gar nicht das Problem ist, nach dem gefragt wurde, weil sonst viel Arbeit in ein langes Programm gesteckt wird, und am Ende kommt dann die Frage wie löst man ein Problem das dadurch entstanden ist, ohne alles umschreiben zu müssen. Tja, gar nicht. Darum sollte man das halt von Anfang an richtig machen. Oder eben das ”Lehrgeld” bezahlen und dann einmal die Arbeit rein stecken es ordentlich zu machen. Das gehört normalerweise sowohl bei Hobbies als auch bei Profis zum Lernprozess, dass man Fehler macht, Sachen neu machen, oder relativ aufwändig überarbeiten muss. Hinterher ist man schlauer und macht den Fehler nicht noch mal.

Und auch der Frust, dass man ja eigentlich fertig ist, aber für eine kleine Funktionalität oder einen scheinbar kleinen Bugfix doch noch mal den Code komplett überarbeiten muss, ist eine normale Erfahrung die auch Profis kennen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten