J'ai utilisé le temps pour attraper une impression et maintenant je cherche un moyen de juste 1 imprimer sans interrompre mon temps:
Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected Keyboard connected
mais ce que j'obtiens dans la sortie est ceci:
import wmi
import time
device_connected_wql = "SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA \'Win32_Keyboard\'"
device_disconnected_wql = "SELECT * FROM __InstanceDeletionEvent WITHIN 2 WHERE TargetInstance ISA \'Win32_Keyboard\'"
c = wmi.WMI()
connected_watcher = c.watch_for(raw_wql=device_connected_wql)
disconnected_watcher = c.watch_for(raw_wql=device_disconnected_wql)
while 1:
try:
connected = connected_watcher(timeout_ms=1)
except wmi.x_wmi_timed_out:
pass
else:
if connected:
print("Keyboard connected")
try:
disconnected = disconnected_watcher(timeout_ms=1)
except wmi.x_wmi_timed_out:
pass
else:
if disconnected:
print("Disconnected")
j'apprécierai une suggestion
3 Réponses :
Une fois connecté, il sera toujours connecté. Vous devez terminer la boucle while une fois qu'elle est connectée.
Je ferais ceci:
if connected:
print("Keyboard connected")
break
Vous pouvez également créer une variable et remplacer la valeur "1". Ensuite, si vous ne souhaitez pas utiliser break, vous pouvez modifier la valeur de la variable.
Je l'ai fait mais "Break" a arrêté mon temps et je ne peux pas arrêter le moment, je veux juste une impression par action
Enregistrez l'état dans une variable et imprimez uniquement si l'état change:
state = 'unknown'
while 1:
try:
connected = connected_watcher(timeout_ms=1)
except wmi.x_wmi_timed_out:
pass
else:
if connected and state != 'connected':
state = 'connected'
print("Keyboard connected")
try:
disconnected = disconnected_watcher(timeout_ms=1)
except wmi.x_wmi_timed_out:
pass
else:
if disconnected and state != 'disconnected':
state = 'disconnected'
print("Disconnected")
J'en déduis que ce que vous essayez de faire est de vous connecter et de vous déconnecter aussi rapidement que possible, et d'imprimer le message lorsque l'état change. Dans ce cas, ce que vous recherchez, c'est ce changement. Vous devez implémenter la machine d'état appropriée. Pour le moment, votre processus échoue dès que vous revenez en haut, car vous ne réinitialisez jamais vos indicateurs de connexion. Essayez plutôt une simple variable statistique:
connected = False
while True:
# loop until connected
while not connected:
try:
connected = connected_watcher(timeout_ms=1)
except wmi.x_wmi_timed_out:
pass
print("Keyboard connected")
# loop until disconnected
while connected:
try:
connected = not disconnected_watcher(timeout_ms=1)
except wmi.x_wmi_timed_out:
pass
print("Keyboard disconnect")
Est-ce ce dont vous avez besoin?