J'ai essayé de créer mon propre bot de discorde visant à l'exécution de code arbitraire, et je suis plutôt satisfait du résultat. Cependant, il semble que chaque fois que le bot est lancé de n'importe où sans une console attachée à lui (unités Systemd, cron ...) le comportement est inattendu et il est incapable d'obtenir des entrées ou des sorties correctement. Cependant, s'il est lancé à partir de ssh ou de l'ordinateur lui-même, rien de tout cela ne se produit. Après quelques essais et erreurs, j'ai supposé que cela devait être dû à la façon dont subprocess gère stdout et stderr, mais je ne suis pas sûr de ce qui se passe. C'est la partie du code qui gère la génération de sous-processus.Le sous-processus python ne semble pas fonctionner correctement lorsqu'il n'y a pas de console connectée
def_subprocess(path_to_executable)
timeout_flag = True
run_process = subprocess.Popen(path_to_executable, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
try:
stdout, stderr = run_process.communicate(timeout=5)
except subprocess.TimeoutExpired:
stdout, stderr, timeout_flag = timeout(run_process)
return stdout.decode("utf-8"), stderr.decode("utf-8"), timeout_flag
def timeout(process):
line_number = 0
stderr = b""
stdout = b""
while line_number < 5:
stdout += process.stdout.readline()
line_number += 1
process.kill()
timeout_flag = True
return stdout, stderr, timeout_flag
Il ne semble pas qu'il n'y a pas stdout ou stderr, au lieu qu'il se sent comme il n'attend pas la fin du processus et il produit juste ordures (Donner le robot la même entrée ne garantit pas la même sortie, comme vous pouvez le voir dans cette image :)
Je suis déconcerté, et je n'ai aucune idée sur ce qui pourrait se produire.
'discord.py' est construit sur' asyncio', votre code bloque-t-il quand il ne le devrait pas? Avez-vous des erreurs/sortie dans la console où vous avez démarré le bot? Toutes les erreurs python que le bot produira seront affichées ici. –
C'est le problème Patrick, quand il est lancé depuis une console, aucun de ces comportements ne se produit. Au lieu de cela, j'obtiens le comportement attendu où tout fonctionne correctement. Cela ne fonctionne pas quand il n'y a pas de console attachée, et quand cela arrive, je ne peux pas vérifier la sortie. – Kurolox
Désolé, j'ai oublié de vous mentionner @PatrickHaugh. – Kurolox