Nabend
ich hab da mal eine frage:
wie kann ich einen Parameter / Übergabewert via Shell an ein Pythonsript übergeben.
bei dem script würde ich immer 1 als start parameter übergeben. wie kann ich das ggf über die shell übergeben
thx
def main():
exit = False
session = setup_session()
client.username_pw_set("<UUID From Platform>", "<PWD>")
client.connect("mqttbroker",1 ,1 )
while not exit:
print("Start polling (1)")
print("Stop polling (2)")
print("Exit (3)")
userInput = input("Your choice: ")
if userInput.isdigit():
choice = int(userInput)
if choice == 1:
print("Start polling...")
session.start_polling()
elif choice == 2:
print("Stop polling...")
session.stop_polling()
else:
exit = True
else:
exit = True
print("fini.")
if __name__ == "__main__":
main()
Übergabeparameter aus der shell
- noisefloor
- User
- Beiträge: 3875
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
du kannst sys.argv nutzen (https://docs.python.org/3/library/sys.html#sys.argv). argv enthält die Argumente, die beim Kommandozeilenaufruf übergeben wurden.
sys.argv ist minimalistisch, reicht aber, wenn man nur eine Zahl oder so mitgeben will. Wenn man mehr Kommandozeilenparameter hat sollte man mindestens argparse (https://docs.python.org/3/library/argparse.html) aus der Standardbibliothek nehmen.
Aber:
Gruß, noisefloor
du kannst sys.argv nutzen (https://docs.python.org/3/library/sys.html#sys.argv). argv enthält die Argumente, die beim Kommandozeilenaufruf übergeben wurden.
sys.argv ist minimalistisch, reicht aber, wenn man nur eine Zahl oder so mitgeben will. Wenn man mehr Kommandozeilenparameter hat sollte man mindestens argparse (https://docs.python.org/3/library/argparse.html) aus der Standardbibliothek nehmen.
Aber:
Wenn der Startparameter immer 1 ist kann man das doch fest im Skript hinterlegen?bei dem script würde ich immer 1 als start parameter übergeben. wie kann ich das ggf über die shell übergeben
Gruß, noisefloor
- __blackjack__
- User
- Beiträge: 13190
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@ChrisD: In `sys.argv` finden sich die Argumente die beim Start übergeben wurden.
Anmerkungen zum Quelltext:
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
`exit` ist überflüssig. Man würde da einfach eine ”Endlosschleife” schreiben und die an der/den entsprechenden Stelle(n) mit `break()` verlassen.
`isdigit()` ist an der Stelle leicht kaputt, weil es Zeichen gibt die da `True` ergeben, sich aber nicht mit `int()` in eine Zahl umwandeln lassen. Und man muss noch nicht mal superexotische Zeichen dafür hernehmen, es geht sogar etwas was auf normalen Tastaturen aufgedruckt ist:
Statt zu testen würde man hier einfach umwandeln und auf die Ausnahme entsprechend reagieren.
Anmerkungen zum Quelltext:
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
`exit` ist überflüssig. Man würde da einfach eine ”Endlosschleife” schreiben und die an der/den entsprechenden Stelle(n) mit `break()` verlassen.
`isdigit()` ist an der Stelle leicht kaputt, weil es Zeichen gibt die da `True` ergeben, sich aber nicht mit `int()` in eine Zahl umwandeln lassen. Und man muss noch nicht mal superexotische Zeichen dafür hernehmen, es geht sogar etwas was auf normalen Tastaturen aufgedruckt ist:
Code: Alles auswählen
In [202]: "²".isdigit()
Out[202]: True
In [203]: int("²")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[203], line 1
----> 1 int("²")
ValueError: invalid literal for int() with base 10: '²'
Code: Alles auswählen
def main():
session = setup_session()
client.username_pw_set("<UUID From Platform>", "<PWD>")
client.connect("mqttbroker", 1, 1)
while True:
print("Start polling (1)")
print("Stop polling (2)")
print("Exit (3)")
user_input = input("Your choice: ")
try:
choice = int(user_input)
except ValueError:
break
if choice == 1:
print("Start polling...")
session.start_polling()
elif choice == 2:
print("Stop polling...")
session.stop_polling()
else:
break
print("fini.")
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
@__blackjack__
danke für den ansatz.
muss ich mir morgen noch mal anschauen bekomme da nur fehlermeldungen zurück
@noisefloor
werde ich auch definitiv testen
es geht darum das script später via cron immer am laufen zu haben und nach einem neustart auch automatisch zu starten
schon mal danke
danke für den ansatz.
muss ich mir morgen noch mal anschauen bekomme da nur fehlermeldungen zurück
@noisefloor
werde ich auch definitiv testen
es geht darum das script später via cron immer am laufen zu haben und nach einem neustart auch automatisch zu starten
schon mal danke
Wie soll denn bei einem automatisch gestarteten Script eine Auswahl erfolgen? Weder zum Start noch während der Laufzeit kann die Nutzereingaben verarbeiten. Wenn du zur Laufzeit da irgendwie eingreifen willst, musst du was anderes einsetzten.
- noisefloor
- User
- Beiträge: 3875
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
hat zwar nicht direkt was mit Python zu tun, aber
Gruß, noisefloor
hat zwar nicht direkt was mit Python zu tun, aber
Cron ist angestaubt, Stand der Technik ist seit ca. 10 Jahren systemd. Zum automatischen Starten beim Systemstart nimmt man eine systemd Service Unit, zum periodischen Starten zum Zeitpunkt X eine systemd Timer Unit.es geht darum das script später via cron immer am laufen zu haben
Gruß, noisefloor