Python et taper des lignes de commandes depuis son Twitter

Publié le 01 octobre 2009 par Mikebrant

Vous n’avez plus d’accès ssh à votre serveur ? vous devez faire une chose importante dessus ?
Et bien ce petit programme est là pour ça :
vous allez pouvoir, depuis votre twitter, éxécuter des lignes de commandes sur un ordinateur distant !

Bon, ok…ça sert à rien, mais j’ai trouvé marrant d’y faire, donc voilà un petit tuto, tout petit, vu que le script est court.

D’abord il nous faut le module python-twitter.

Et ensuite, voilà le joli code :

#-*- coding:utf-8 -*-
import twitter
import time
from subprocess import Popen#,PIPE,STDOUT

#voilà un twitt type : shell:maCommande -i saucisson -o chocolat

NOM = «  »#l’utilisateur qui va taper des lignes de commandes
FLAG = « shell:« #le flag qui indique que l’utilisateur veut tapper une ligne de commande doit être placé au tout début du twitt
SLEEP = 60#le sleep en secondes
SORTIE_FICHIER =  « temp.txt »#le fichier contenant la sortie

NOM_ENVOYEUR
= «  »#mettre des chaines vides si vous ne voulez pas envoyez le résultat de la sortie
PASS_ENVOYEUR = «  »#à l’utilisateur NOM

api = twitter.Api(username=NOM_ENVOYEUR,password=PASS_ENVOYEUR)

idDernierTwittCommande = 0#l’id du dernier twittCommande

while True:
   utilisateur = api.GetUser(NOM)#retourne l’utilisateur (instance de la classe twitter.User)
   dernierTwitt = utilisateur.GetStatus()#retourne son dernier twitt (instance de la classe twitter.Status)

   if(dernierTwitt.text.startswith(FLAG) and idDernierTwittCommande!=dernierTwitt.id):
   idDernierTwittCommande = dernierTwitt.id#on change l’id du dernier twittCommande

   commande = dernierTwitt.text.split(FLAG)[1]#on prend la commande
   print(commande)
   commande = commande.split(‘ ‘)# paramètres séparés par 1 espace

   fichier = open(SORTIE_FICHIER,’w+’)
   ps = Popen(commande,stdout=fichier, stderr=fichier)#on éxécute la commande
   ps.communicate()
   fichier.close()
   print(« commande éxécutée »)

   if NOM_ENVOYEUR :#si on a un envoyeur:
   #on envoie via MP la sortie de la commande  à l’utilisateur l’ayant tapé.
   import codecs
   fichier = codecs.open(SORTIE_FICHIER,’r',encoding= »utf-8″)
   api.PostDirectMessage(NOM,fichier.read())
   fichier.close()
   print(« sortie envoyée »)

   time.sleep(SLEEP)

Je pense que les commentaires devraient suffire à vous expliquer le fonctionnement de ce petit script.
Remplacez NOM par le nom de la personne tapant les lignes de commande.

Si vous voulez envoyer le retour de la ligne en MP, remplissez les champs NOM_ENVOYEUR et PASS_ENVOYEUR , sinon mettez des chaines vides.

D’ailleurs voici mon twitter.