Ich habe ein Problem in Bezug auf Pythonw. Ich mache ein Programm, das im Hintergrund ausgeführt werden soll. Wenn es startet, soll es den Computernamen, den Benutzernamen und das Ergebnis einer Überprüfung senden, um zu sehen, ob das Programm Adminrechte hat. Hier ist der relevante Teil des Client-Code:Python pythonw Subprozess check_output funktioniert nicht
computername = subprocess.check_output("echo %computername%", shell=True).decode(sys.stdout.encoding).splitlines()[0]
username = subprocess.check_output("echo %username%", shell=True).decode(sys.stdout.encoding).splitlines()[0]
isadmin = ctypes.windll.shell32.IsUserAnAdmin()
sleep(0.5)
s.send(computername.encode() + ";;".encode() + username.encode() + ";;".encode() + str(isadmin).encode())
Und das ist das Stück von Server-Code, der angenommen hat, um es zu empfangen:
data = conn.recv(1024).decode().split(";;")
print(data)
clientcount += 1
clientlist.append({"conn": conn, "ip": ip, "id": clientcount, "name": data[0] + "\\" + data[1], "isadmin": int(data[2])})
(die Druckzeile ist nur für debug) Also hier ist die Problem. Wenn ich den Client-Code als client.py
ausführen, alles normal funktioniert, bekomme ich diese Ausgabe:
['DESKTOP-#######', '######', '0']
und der Code kann weiter gehen. Aber wenn ich das Programm als client.pyw
ausführen, wie es angenommen hat, zu sein, die ich erhalten:
['']
Also ich natürlich einen Indexerror bekommen. Ich vermute, etwas schief geht mit dem Subprozess.check_output. Es ist normal? Mit was könnte ich es ersetzen, so dass es im Hintergrund funktioniert?
(Ich verwende Python 3.5)
Dank
Nehmen wir an, du würdest français vu ton nom, ça tombe bien, moi aussi ^^. Haha, quel idiot, j'avais complètement oublié os.getenv == ". Je vais utiliser ça, mais sinon, j'ai résolu mon proplème. C'était eine Ursache du sys.stdout.encoding, vu que c'est de arrière plan il n'y a pas de stdout ^^ ". Sans ça ça marche, mais je vais quand même utiliser os.getenv(), plus sauber. Merci! – Alpha
oui, c'est mieux! Ja, es ist besser. –