Attendre jusqu'à ce que la tâche est achevée sur la Machine Distante via Python
Je suis en train d'écrire un programme en python sur Ubuntu. Dans ce programme, je suis en train d'imprimer un message après l'achèvement d'une tâche "Supprimer un Fichier" sur la machine Distante (RaspberryPi), connectés à un réseau.
Mais, En pratique, de la commande d'impression n'est pas en attente jusqu'à l'achèvement de la tâche sur la machine distante.
Quelqu'un peut-il me guider sur comment dois-je faire?
Mon Codage est donné ci-dessous
import paramiko
# Connection with remote machine
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.2.34', username='pi', password='raspberry')
filename = 'fahad.txt'
filedelete ='rm ' + filename
stdin, stdout, stderr = client.exec_command(filedelete)
print ("File Deleted")
client.close()
double possible de paramiko SSH exec_command(script shell) retourne avant la fin
négatif.. parce que ma tâche, je ne sais pas combien de temps cela va prendre... il est dépend de la taille de fichier
Dupliquer : [Paramiko à executre des commandes à distance][1] [1]: stackoverflow.com/questions/3924411/...
négatif.. parce que ma tâche, je ne sais pas combien de temps cela va prendre... il est dépend de la taille de fichier
Dupliquer : [Paramiko à executre des commandes à distance][1] [1]: stackoverflow.com/questions/3924411/...
OriginalL'auteur Irfan Ghaffar7 | 2015-02-12
Vous devez vous connecter pour publier un commentaire.
C'est en effet un double de paramiko SSH exec_command(script shell) retourne avant la fin, mais la réponse n'est pas très détaillée. Alors...
Comme vous l'avez remarqué,
exec_command
est un non-bloquant appel. Donc, vous devez attendre la fin de la commande à distance en utilisant soit:Canal.exit_status_ready
si vous voulez un non-blocage de la vérification de l'achèvement de la commande (c'est à dire: la mise en commun)Canal.recv_exit_status
si vous souhaitez bloquer jusqu'à l'achèvement de la commande (et de revenir le statut de sortie — un statut de sortie de 0 signifie que la normale d'achèvement).Dans votre cas particulier, vous avez besoin de la plus tard:
C'est plutôt ... surprenant ?!? Juste pour être sûr: le fichier est vraiment supprimé sur la cible et le code de résultat renvoyé est 0 mais, vous pouvez le récupérer avant la fin ? Comment vérifiez-vous pour la réalisation de la commande ?
ok attendez... je vais vérifier de manière différente...
pas de problème. Pour vérifier que vous pourrait simplement émettre un
ls
appel à l'aide de paramiko dans vous programme en Python après le "douteux" en fin de commande. De cette façon, on serait fixé, pour sûr.travail merci pour ce... est-ce possible que je peux vous poser directement ma question
OriginalL'auteur Sylvain Leroux
En plus de faire ce que Sylvian Leroux suggère:
Si vos commandes impliquent l'exécution d'un script bash qui doit continuer à courir après paramiko ferme la session ssh (à chaque fois que vous envoyez une commande ce qui se passe) utilisation:
nohup ./my_bash_script.sh >/dev/null 2>&1
.nohup
indique au système que ce processus devrait ignorer les "raccrocher" signal reçu lors de la session ssh est fermé.>/dev/null 2>&1
redirige la sortie. Cela est nécessaire parce que, dans certaines situations, le contrôle ne sera pas remis à votre script python jusqu'à ce qu'une sortie est reçu.Pour exécuter des applications en ligne de commande comme "stress" et de "vlc" et de les garder en cours d'exécution après votre retour, la seule solution que j'ai trouvé est de mettre vos commandes dans un script bash, suivie par une
&
ou&>/dev/null
que l'appel de script bash avec paramiko à l'aide de la méthode que je mentionne dans le paragraphe précédent.Cela semble un peu "hacky" mais c'est le seul moyen que j'ai trouvé après des jours de recherche.
OriginalL'auteur hammeramr