Doppelte IP Adressen auffinden, anzeigen und ggf. ändern
@TrayserCassa: Das mit dem ``except:`` hat nichts damit zu tun ob Du den Code testest oder nicht. Das ist ein Problem wenn Ausnahmen auftreten mit denen Du nicht gerechnet hast, also auch nicht beim Testen, denn wenn Du damit gerechnet hättest, dann hättest Du dafür ja einen Test durchgeführt. Und wenn Du keine Unit-Tests hast, dann müsstest Du manuell nach jeder Programmänderung die Tests für die geänderte Stelle manuell machen. Und zwar jedes mal die selben. So aus dem Kopf.
Du musst die Bedingung für das ``continue`` nur umdrehen. Also nicht gehe zum Anfang wenn etwas nicht stimmt, sondern mache dieses hier *wenn* alles stimmt. Zu einer Ausnahmebehandlung gehört ein ``try`` und dann gibt es noch ``except``, ``finally``, und ``else``. Ein ``else``-Block wird ausgeführt, wenn im ``try``-Block *keine* Ausnahme aufgetreten ist. Du solltest neben Deinem Buch eventuell auch mal einen Blick in die Python-Dokumentation werfen. Erwarte nicht, dass in einem Buch wirklich alles vorkommt, was eine Programmiersprache an Syntax bietet. Und auch nicht alle Methoden auf Grunddatentypen. `is_decimal()` ist wie gesagt eine Methode auf Zeichenketten. Da braucht man kein Modul für und mit den Methoden die Zeichenketten bieten, sollte man sich auseinandersetzen. Das sind Grundlagen. Und auch da würde ich nicht erwarten, dass die alle in einem Buch einzeln besprochen werden. Die Python-Dokumentation ist wichtig, für das praktische Arbeiten am Ende wichtiger als ein Lehrbuch.
Das Ergebnis des Tests ist das selbe, allerdings wesentlich einfacher und mit deutlich weniger Quelltext den man verstehen muss. Statt ``try``/``except``/``else`` ist es einfach nur ein ``if`` und dieser Methodenaufruf.
Beim `subprocess.call()` bitte das ``shell=True`` weg lassen. Sonst handelt man sich die gleichen Probleme ein, die `os.system()` hat.
Du musst die Bedingung für das ``continue`` nur umdrehen. Also nicht gehe zum Anfang wenn etwas nicht stimmt, sondern mache dieses hier *wenn* alles stimmt. Zu einer Ausnahmebehandlung gehört ein ``try`` und dann gibt es noch ``except``, ``finally``, und ``else``. Ein ``else``-Block wird ausgeführt, wenn im ``try``-Block *keine* Ausnahme aufgetreten ist. Du solltest neben Deinem Buch eventuell auch mal einen Blick in die Python-Dokumentation werfen. Erwarte nicht, dass in einem Buch wirklich alles vorkommt, was eine Programmiersprache an Syntax bietet. Und auch nicht alle Methoden auf Grunddatentypen. `is_decimal()` ist wie gesagt eine Methode auf Zeichenketten. Da braucht man kein Modul für und mit den Methoden die Zeichenketten bieten, sollte man sich auseinandersetzen. Das sind Grundlagen. Und auch da würde ich nicht erwarten, dass die alle in einem Buch einzeln besprochen werden. Die Python-Dokumentation ist wichtig, für das praktische Arbeiten am Ende wichtiger als ein Lehrbuch.
Das Ergebnis des Tests ist das selbe, allerdings wesentlich einfacher und mit deutlich weniger Quelltext den man verstehen muss. Statt ``try``/``except``/``else`` ist es einfach nur ein ``if`` und dieser Methodenaufruf.
Beim `subprocess.call()` bitte das ``shell=True`` weg lassen. Sonst handelt man sich die gleichen Probleme ein, die `os.system()` hat.
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
In diesem Fall wird Try verwendet um zu testen ob das eine zahl ist. Wenn nicht dann neue eingabe ... Wenn ich jetzt was anderes als eine Zahl von 1 bis 255 eingebe, dann soll der den Ping ja nicht ausführen weil das unnötige Arbeit ist. Bei einem Fehler geh nach except und da wird dann gesagt wieder von neuen anfangen. :K Was ist daran falsch?@TrayserCassa: Das mit dem ``except:`` hat nichts damit zu tun ob Du den Code testest oder nicht. Das ist ein Problem wenn Ausnahmen auftreten mit denen Du nicht gerechnet hast, also auch nicht beim Testen, denn wenn Du damit gerechnet hättest, dann hättest Du dafür ja einen Test durchgeführt. Und wenn Du keine Unit-Tests hast, dann müsstest Du manuell nach jeder Programmänderung die Tests für die geänderte Stelle manuell machen. Und zwar jedes mal die selben. So aus dem Kopf.
Ok danke für den TippDu musst die Bedingung für das ``continue`` nur umdrehen. Also nicht gehe zum Anfang wenn etwas nicht stimmt, sondern mache dieses hier *wenn* alles stimmt. Zu einer Ausnahmebehandlung gehört ein ``try`` und dann gibt es noch ``except``, ``finally``, und ``else``. Ein ``else``-Block wird ausgeführt, wenn im ``try``-Block *keine* Ausnahme aufgetreten ist. Du solltest neben Deinem Buch eventuell auch mal einen Blick in die Python-Dokumentation werfen. Erwarte nicht, dass in einem Buch wirklich alles vorkommt, was eine Programmiersprache an Syntax bietet. Und auch nicht alle Methoden auf Grunddatentypen. `is_decimal()` ist wie gesagt eine Methode auf Zeichenketten. Da braucht man kein Modul für und mit den Methoden die Zeichenketten bieten, sollte man sich auseinandersetzen. Das sind Grundlagen. Und auch da würde ich nicht erwarten, dass die alle in einem Buch einzeln besprochen werden. Die Python-Dokumentation ist wichtig, für das praktische Arbeiten am Ende wichtiger als ein Lehrbuch.
Stimmt nur trenne ich gerne generell Erfolg und Misserfolg voneinander und eine reine if verzweigung finde ich nicht wirklich übersichtlicher, aber dennoch im Bereich des MöglichenDas Ergebnis des Tests ist das selbe, allerdings wesentlich einfacher und mit deutlich weniger Quelltext den man verstehen muss. Statt ``try``/``except``/``else`` ist es einfach nur ein ``if`` und dieser Methodenaufruf.
Dadurch würde die shell wieder zum vorschein kommen und da liegt mein Problem...Beim `subprocess.call()` bitte das ``shell=True`` weg lassen. Sonst handelt man sich die gleichen Probleme ein, die `os.system()` hat.
ok soweit zum Coden jetzt nur meine Frage noch wie ich netsh als Admin ausführe ...
Und ist schon klar, warum du ein try/except verwendest. Du verwendest es allerdings falsch, da bei dir alle Fehler abgefangen werden, auch wenn diese gar nichts mit der Umwandlung der Zahl zu tun haben. Damit verdeckst du unter Umständen Programmierfehler, welche dann auch noch schwer zu finden sind, weil du falsche Meldungen bekommst und, im schlimmsten Fall, sich das Programm in einem inkonsistenten Zustand befindet und dann an einer Stelle abstürzt, die mit dem eigentlichen Fehler nichts zu tun hat. Mal als Beispiel:
In beiden Beispielen wird die Variable "hier_wird_eine_name_error_geworfen" verwendet, obwohl sie vorher nie angelegt wurde. Wenn du einfach alle Fehler abfängst, so wie du es im Moment macht, dann endet das ganze wie im oberen Beispiel. Der Benutzer gibt die Zahl korrekt ein, in der nächsten Zeile hast du in deinem Programm allerdings einen Fehler gemacht. Die Exception wird abgefangen und es wird einfach behauptet, dass die Eingabe falsch war. Im zweiten Fall hingegen gibt es die korrekte Fehlermeldung.
Code: Alles auswählen
>>> try:
... input("Zahl eingeben: ")
... hier_wird_eine_name_error_geworfen *= 2
... except:
... print("Es wurde keine Zahl eingegeben")
...
Zahl eingeben: 42
42
Es wurde keine Zahl eingegeben
Code: Alles auswählen
>>> try:
... input("Zahl eingeben: ")
... hier_wird_eine_name_error_geworfen *= 2
... except ValueError:
... print("Es wurde keine Zahl eingegeben")
...
Zahl eingeben: 42
42
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
NameError: name 'hier_wird_eine_name_error_geworfen' is not defined
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Ahhh ok hat Klick gemacht bloß wo liegt der fehler wenn ich nur eine Zeile in einem Try Zweig habe Aber Ich weiß worauf Ihr beide hinaus wollt Danke für die Tipp's und vorallem um die BemühungenEyDu hat geschrieben:Und ist schon klar, warum du ein try/except verwendest. Du verwendest es allerdings falsch, da bei dir alle Fehler abgefangen werden, auch wenn diese gar nichts mit der Umwandlung der Zahl zu tun haben. Damit verdeckst du unter Umständen Programmierfehler, welche dann auch noch schwer zu finden sind, weil du falsche Meldungen bekommst und, im schlimmsten Fall, sich das Programm in einem inkonsistenten Zustand befindet und dann an einer Stelle abstürzt, die mit dem eigentlichen Fehler nichts zu tun hat. Mal als Beispiel:
Code: Alles auswählen
>>> try: ... input("Zahl eingeben: ") ... hier_wird_eine_name_error_geworfen *= 2 ... except: ... print("Es wurde keine Zahl eingegeben") ... Zahl eingeben: 42 42 Es wurde keine Zahl eingegeben
In beiden Beispielen wird die Variable "hier_wird_eine_name_error_geworfen" verwendet, obwohl sie vorher nie angelegt wurde. Wenn du einfach alle Fehler abfängst, so wie du es im Moment macht, dann endet das ganze wie im oberen Beispiel. Der Benutzer gibt die Zahl korrekt ein, in der nächsten Zeile hast du in deinem Programm allerdings einen Fehler gemacht. Die Exception wird abgefangen und es wird einfach behauptet, dass die Eingabe falsch war. Im zweiten Fall hingegen gibt es die korrekte Fehlermeldung.Code: Alles auswählen
>>> try: ... input("Zahl eingeben: ") ... hier_wird_eine_name_error_geworfen *= 2 ... except ValueError: ... print("Es wurde keine Zahl eingegeben") ... Zahl eingeben: 42 42 Traceback (most recent call last): File "<stdin>", line 3, in <module> NameError: name 'hier_wird_eine_name_error_geworfen' is not defined
mfg
Trayser
Auch in einer Zeile kann man problemlos Fehler einbauen. Oder eine Zeile ändert sich mal. Gerne werden aus einer Zeile auch mal zwei, oder drei, oder mehr. Dann übersieht man leicht, dass irgendwo noch etwas angepasst werden muss und schon hat man einen richtigen Fehler.
Behandle also nur das, was du auch wirklich behandeln kannst. Wenn dir dein Programm dann um die Ohren fliegt, dann hast du immerhin die Chance den Fehler zu beseitigen.
Behandle also nur das, was du auch wirklich behandeln kannst. Wenn dir dein Programm dann um die Ohren fliegt, dann hast du immerhin die Chance den Fehler zu beseitigen.
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Jop habs getestetEyDu hat geschrieben:Auch in einer Zeile kann man problemlos Fehler einbauen. Oder eine Zeile ändert sich mal. Gerne werden aus einer Zeile auch mal zwei, oder drei, oder mehr. Dann übersieht man leicht, dass irgendwo noch etwas angepasst werden muss und schon hat man einen richtigen Fehler.
Behandle also nur das, was du auch wirklich behandeln kannst. Wenn dir dein Programm dann um die Ohren fliegt, dann hast du immerhin die Chance den Fehler zu beseitigen.
Hab mal bei der int(ip_eingabe) die Falsche Variabel gesetzt =) Danke für den Hinweiß
@TrayserCassa: Wo ein Fehler liegt wenn man nur eine Zeile im ``try``-Block stehen hat, ist auch nicht so einfach zu beantworten wenn diese eine Zeile aus einem Funktionsaufruf besteht. Denn diese Funktion kann ja viele Zeilen haben, und da können ja auch Fehler drin sein. Und sie kann ihrerseits wieder Funktionen aufrufen. Die auch wieder Fehler haben können. Und so weiter.
Mit dem ``continue`` hast Du Erfolg und Misserfolg doch in der Struktur des Quelltextes auch nicht getrennt. Und bei einem ``if`` hättest Du dann im Misserfolgsfall ein ``else`` in dem nichts drin stehen würde. Oder Du gibst dort die Meldung aus, dass es keine Zahl war. Auf jeden Fall ist auch ein ``if``/``else`` hier einfacher als ein ``try``/``except``/``else``.
Mit dem ``continue`` hast Du Erfolg und Misserfolg doch in der Struktur des Quelltextes auch nicht getrennt. Und bei einem ``if`` hättest Du dann im Misserfolgsfall ein ``else`` in dem nichts drin stehen würde. Oder Du gibst dort die Meldung aus, dass es keine Zahl war. Auf jeden Fall ist auch ein ``if``/``else`` hier einfacher als ein ``try``/``except``/``else``.
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Stimmt auch wiederBlackJack hat geschrieben:@TrayserCassa: Wo ein Fehler liegt wenn man nur eine Zeile im ``try``-Block stehen hat, ist auch nicht so einfach zu beantworten wenn diese eine Zeile aus einem Funktionsaufruf besteht. Denn diese Funktion kann ja viele Zeilen haben, und da können ja auch Fehler drin sein. Und sie kann ihrerseits wieder Funktionen aufrufen. Die auch wieder Fehler haben können. Und so weiter.
Ok stimmt nur frag ich dann ab ob die Zahl umgewandelt wurde nur fällt mir dazu der vergleich nicht ein...Mit dem ``continue`` hast Du Erfolg und Misserfolg doch in der Struktur des Quelltextes auch nicht getrennt. Und bei einem ``if`` hättest Du dann im Misserfolgsfall ein ``else`` in dem nichts drin stehen würde. Oder Du gibst dort die Meldung aus, dass es keine Zahl war. Auf jeden Fall ist auch ein ``if``/``else`` hier einfacher als ein ``try``/``except``/``else``.
if int(ip_eingabe) == ip_eingabe:
Weiter ....
ok Klappt dann der else zweig hinten dran ... ok kapiert
dankeschön für euer Verständnis
mfg
Trayser
@TrayserCassa: Das wird aus zwei Gründen nicht funktionieren: Eine Zahl ist immer ungleich einer Zeichenkette, und wenn die Eingabe keine Zahl ist, dann wird beim Versuch sie umzuwandeln eine Ausnahme ausgelöst. Die Methode heisst `is_decimal()` und ist auf Zeichenketten zu finden.
Du könntest dir einige Zeit sparen, wenn jeder user im Netzwerk eine fest IP bekommt.
Wenn alle miteinander verbunden sind, sollte es keine große Aufgabe darstellen, jedem eine IP zuzusenden.
Code: Alles auswählen
IP = "192.168.0."
IPAdressen= []
for i in range(1, 50):
nIP = IP + str(i)
IPAdressen.append(nIP)
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Naja wenn man eine Zahl eingibt Funktionierts allerdings bei falscher Eingabe ValueError ...@TrayserCassa: Das wird aus zwei Gründen nicht funktionieren: Eine Zahl ist immer ungleich einer Zeichenkette, und wenn die Eingabe keine Zahl ist, dann wird beim Versuch sie umzuwandeln eine Ausnahme ausgelöst. Die Methode heisst `is_decimal()` und ist auf Zeichenketten zu finden.
Das geht wieder über mein Wissen hinaus Klar ich kann googel anschmeißen oder in der Dokomentation rein schnuppern, aber bei diesem Buch haben die das nichts anders gemacht Für dich ist das leicht und verständlich ich bin grade mal bei der hälfte des Buches und will einfach mal was auf die Beine stellen...
Ich könnte auch jedem die Wahl lassen ... Wie schon erwähnt es gibt zich verbesserungsvorschläge und wenn ich bei dem Buch bei tkinter angelangt bin schreib ich noch eine schöne Gui, aber fürs erste sollte man seine IP selber eingeben dürfen Aber danke trotzdem, demnächst bau ich dann eine Abfrage rein ob Zufallsgenerriert oder selbsteingabeDu könntest dir einige Zeit sparen, wenn jeder user im Netzwerk eine fest IP bekommt.
Code:Code: Alles auswählen
IP = "192.168.0." IPAdressen= [] for i in range(1, 50): nIP = IP + str(i) IPAdressen.append(nIP)
Wenn alle miteinander verbunden sind, sollte es keine große Aufgabe darstellen, jedem eine IP zuzusenden.
Naja und da ich jetzt noch kein Hinweiß darauf bekommen hab ist cx_Freeze für Python 3.2 und 3.3 ein Code zu Exe converter
Nur blöde das der nicht bei mir funktioniert ... Hat jemand noch eine andere Lösung wie man Adminrechte bei einem subprocess bekommt?
mfg
Trayser
@TrayserCassa: Es funktioniert auch nicht wenn man eine Zahl eingibt, weil wie gesagt ein Wert vom Typ ganzer Zahl immer ungleich einem Wert vom Zeichenkette ist.
Und das geht auch nicht über Dein Wissen hinaus. Du weisst jetzt ja das es diese Methode gibt und wo man nachlesen kann was es noch für Methoden auf Zeichenketten gibt. Etwas auf die Beine stellen wollen, aber nicht in der Dokumentation nachlesen wollen was es für Möglichkeiten gibt, widerspricht sich irgendwie.
Und das geht auch nicht über Dein Wissen hinaus. Du weisst jetzt ja das es diese Methode gibt und wo man nachlesen kann was es noch für Methoden auf Zeichenketten gibt. Etwas auf die Beine stellen wollen, aber nicht in der Dokumentation nachlesen wollen was es für Möglichkeiten gibt, widerspricht sich irgendwie.
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Ok sagen wir es so mein Programm funktioniert soweit. Jetzt möchte ich erst das mit dem netsh hin bekommen bevor ich den Code wieder ändere Da ich zurzeit wieder wenig Zeit habe wird das wohl eben dauern ... danach setzte ich dein Vorschlag um und prässentiere den Code hier
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Ok weiß keiner die Antwort?? Ich meine sowas muss doch schon häufiger aufgetreten sein?
Wenn man den Code ausführt:
Zitat von cmd: "Für den angeforderten Vorgang sind erhöhte Rechte erfoderlich <Als Administrator ausführen>"
Mit dem Modul Socket komm ich auch nicht weiter
Kann mir bitte jemand helfen?
mfg
Trayser
Wenn man den Code ausführt:
Code: Alles auswählen
import subprocess
netsh = "netsh interface ip set address name=LAN-Verbindung source=static addr=192.168.0.20 mask=255.255.255.0"
subprocess.call(netsh)
input("Bitte Drücken sie eine Taste zum Benden.")
Mit dem Modul Socket komm ich auch nicht weiter
Kann mir bitte jemand helfen?
mfg
Trayser
Die Fehlermeldung ist doch eindeutig: du hast nicht die benötigten Rechte, um netsh starten zu können. Die Suchmaschine deiner Wahl kann hier sicher weiterhelfen, wie du ein Programm mit Adminstratorrechten startest oder eine Konsole mit entsprechenden Rechten bekommst.
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Natürlich weiß ich wo das Problem liegt und ich weiß sogar gleich Lösungen für mein Problem...
1. py2exe converter ---> Nur blöd das der nicht für Code aus Python3.2 gedacht ist.
2. cx_Freeze converter ---> Der Funktioniert bei mir leider nicht (Installation schlägt fehl).
3. subprocess mit runas ---> Erst heute um 10 Uhr gefunden in diesem Forum. (*klick*
ok soviel dazu....
Versteh mich bitte nicht falsch. Ich bin eigentlich selten Verzweifelt und suche natürlich auch in Google nach meinen Problemen (Dadurch bin ich ja erst auf dieses Forum aufmerksam geworden). Ich wusste schon vorher dass runas Admin rechte benötigt ...
Das erste was ich tat: rechtsklick auf das Script "Als Admini ausführen", leider nicht angegeben. Danach gegooglet und bin mit erfolg auf dem beitrag, den ich oben erwähnt hatte, gestoßen. Converter cx_Freeze versucht zu installieren...
-gegooglet warum der Converter nicht funktioniert.
-gegooglet nach alternativen
Danach habe ich mein Beitrag verfasst und als EyDu geantwortet hatte, habe ich weiter gesucht und gesucht und ...
Jedenfalls bin ich auf subprocess, in verbindung mit runas heute abend um 10 Uhr, gestoßen. Habs auch versucht bis 1.30 Uhr, aber hab dann aufgegeben ... das sah dann so aus:
Batch:
Ich hab das wenigstens mit os.system() zum laufen gebracht:
Ich frage mich die ganze Zeit was bei subprocess falsch ist ... Und da Ich den Code ja noch für andere bereitstellen will, wird blackjack mir gleich sagen das ich os.system() vergessen soll.
Ich erwarte auch keine Hilfe, vielleicht ein bisschen Verständnis für ein Neuling.
Ich bitte vielmehr um Hilfe und die behauptung ich würde keine Lösung suchen ist schlicht:
mfg
Trayser
1. py2exe converter ---> Nur blöd das der nicht für Code aus Python3.2 gedacht ist.
2. cx_Freeze converter ---> Der Funktioniert bei mir leider nicht (Installation schlägt fehl).
3. subprocess mit runas ---> Erst heute um 10 Uhr gefunden in diesem Forum. (*klick*
ok soviel dazu....
Versteh mich bitte nicht falsch. Ich bin eigentlich selten Verzweifelt und suche natürlich auch in Google nach meinen Problemen (Dadurch bin ich ja erst auf dieses Forum aufmerksam geworden). Ich wusste schon vorher dass runas Admin rechte benötigt ...
Das erste was ich tat: rechtsklick auf das Script "Als Admini ausführen", leider nicht angegeben. Danach gegooglet und bin mit erfolg auf dem beitrag, den ich oben erwähnt hatte, gestoßen. Converter cx_Freeze versucht zu installieren...
-gegooglet warum der Converter nicht funktioniert.
-gegooglet nach alternativen
Danach habe ich mein Beitrag verfasst und als EyDu geantwortet hatte, habe ich weiter gesucht und gesucht und ...
Jedenfalls bin ich auf subprocess, in verbindung mit runas heute abend um 10 Uhr, gestoßen. Habs auch versucht bis 1.30 Uhr, aber hab dann aufgegeben ... das sah dann so aus:
Code: Alles auswählen
import subprocess
import os
net = " \"netsh interface ip set address name=LAN-Verbindung source=static addr=192.168.0.152 mask=255.255.255.0\""
subprocess.call(["runas", " /user:" + os.getlogin() + net])
Code: Alles auswählen
runas /user:Patrick "netsh interface ip set address name=LAN-Verbindung source=static addr=192.168.0.22 mask=255.255.255.0"
Code: Alles auswählen
import os
net = " \"netsh interface ip set address name=LAN-Verbindung source=static addr=192.168.0.152 mask=255.255.255.0\""
os.system("runas /user:" + os.getlogin() + net)
Ich erwarte auch keine Hilfe, vielleicht ein bisschen Verständnis für ein Neuling.
Ich bitte vielmehr um Hilfe und die behauptung ich würde keine Lösung suchen ist schlicht:
Code: Alles auswählen
False
Trayser
@TrayserCassa: bei subprocess muss jedes Argument ein eigener Listeneintrag sein.
Bei Deinem ersten Versuch rufst Du also in Wirklichkeit
auf, wenn also »runas« mit dem Leerzeichen vor »/« zurechtkommt, denkt es der User würde »Patrick "netsh …« heißen.
Die »"« sind nur dazu da, Argumente, die Leerzeichen enthalten zusammenzuhalten, da die Abtrennung hier aber durch die Liste vorgegeben sind, sind sie überflüssig.
Bei Deinem ersten Versuch rufst Du also in Wirklichkeit
Code: Alles auswählen
runas " /user:Patrick \"netsh interface ip set address name=LAN-Verbindung source=static addr=192.168.0.22 mask=255.255.255.0\""
Die »"« sind nur dazu da, Argumente, die Leerzeichen enthalten zusammenzuhalten, da die Abtrennung hier aber durch die Liste vorgegeben sind, sind sie überflüssig.
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Oh ok habs:@TrayserCassa: bei subprocess muss jedes Argument ein eigener Listeneintrag sein.
Bei Deinem ersten Versuch rufst Du also in Wirklichkeitauf, wenn also »runas« mit dem Leerzeichen vor »/« zurechtkommt, denkt es der User würde »Patrick "netsh …« heißen.Code: Alles auswählen
runas " /user:Patrick \"netsh interface ip set address name=LAN-Verbindung source=static addr=192.168.0.22 mask=255.255.255.0\""
Die »"« sind nur dazu da, Argumente, die Leerzeichen enthalten zusammenzuhalten, da die Abtrennung hier aber durch die Liste vorgegeben sind, sind sie überflüssig.
Code: Alles auswählen
net = "netsh interface ip set address name=LAN-Verbindung source=static addr=192.168.0.152 mask=255.255.255.0"
subprocess.call(["runas", "/user:" + os.getlogin(), net])
Herzlichen Dank
mfg
Trayser
-
- User
- Beiträge: 97
- Registriert: Donnerstag 2. Mai 2013, 19:11
Ein Paar probleme bleiben aber noch, wie zb den check ob die IP addresse geändert wird...
Fals ich den passenden befehl finde ändere ich den Code
Vielen Dank für eure hilfe
mfg
Trayser
Fals ich den passenden befehl finde ändere ich den Code
Code: Alles auswählen
# Lokale IP setzter
# Made by Zonker
import subprocess
import os
import sys
# IP check und eingabe
anzahl = 0
while True:
ip_eingabe = input("Geben sie Ihre gewünschte locale IP an: 192.168.0.")
print()
ip = "192.168.0." + ip_eingabe
ip_isdecimal = ip_eingabe.isdecimal()
if ip_isdecimal == True:
if int(ip_eingabe) < 255 and int(ip_eingabe) > 0:
check = subprocess.call(["ping", ip])
if check == 1:
print("IP bereits vergeben!")
print()
anzahl = anzahl + 1
if anzahl > 2:
sys.exit("Vorgang abgebrochen!")
elif check == 0:
print("IP ist frei!")
break
else:
print("Fehler")
print()
else:
print("Geben Sie eine Zahl von 1 bis 254 ein!")
else:
print("Geben Sie eine Zahl ein!")
print()
# IP änderung
net = "netsh interface ip set address name=LAN-Verbindung source=static addr=" + ip + " mask=255.255.255.0"
check = subprocess.call(["runas", "/user:" + os.getlogin(), net])
if check == 0:
print()
print("**************************************")
print(" IP erfolgreich geändert")
print(" IP:", ip)
print("**************************************")
print()
elif check == 1:
print("Fehler! Administrator rechte verfügbar?")
else:
print("Fehler")
mfg
Trayser
Das hilft vielleicht nicht unbedingt bei deinem Problem, aber IP-Adressblöcke können auch den Wert 0 oder 255 haben, wie Du ja auch in Deinem Code zeigst. Von daher wäre diese Überprüfung besser:Außerdem statt isdecimal() ginge auch das:Ansonsten frage ich mich, warum du „runas“ als den Benutzer, der das Skript ausführt, ausführst …? Oder verstehe ich runas nicht? ^^
Code: Alles auswählen
if 0 <= int(ip_eingabe) <= 255:
Code: Alles auswählen
try:
ip_eingabe = int(input())
except ValueError:
print("Bitte gib eine Zahl ein", file=sys.stderr)
continue