Maison  >  Article  >  développement back-end  >  Comment corriger l'erreur « Commande introuvable » dans Python Paramiko exec_command ?

Comment corriger l'erreur « Commande introuvable » dans Python Paramiko exec_command ?

DDD
DDDoriginal
2024-10-21 06:58:30768parcourir

How to Fix

Les commandes Unix échouent avec "Command Not Found" dans Python Paramiko exec_command

Lors de l'exécution de commandes Unix à l'aide de Paramiko exec_command de Python, il est possible de rencontrer une erreur telle que " introuvable." Ce problème survient spécifiquement lors de l'utilisation de la commande sesu, alors que d'autres commandes comme ls s'exécutent avec succès.

Cause sous-jacente

La cause réside dans le comportement par défaut de SSHClient.exec_command, qui n'exécute pas de shell "de connexion" et n'alloue pas de pseudo-terminal pour la session. Par conséquent, différents scripts de démarrage peuvent s'exécuter et des variables d'environnement spécifiques peuvent ne pas être définies.

Solutions possibles

Pour résoudre ce problème, plusieurs approches peuvent être adoptées :

  1. Utiliser un chemin de commande complet : Utilisez le chemin complet de l'exécutable sesu, en vous assurant que la commande est indépendante de l'environnement.
  2. Ajustez les scripts de démarrage : Modifiez les scripts de démarrage pour définir systématiquement PATH pour les sessions interactives et non interactives.
  3. Invoquer explicitement le shell de connexion : Exécutez le script en utilisant --login avec des shells compatibles, tels que :
bash --login -c "sesu test"
  1. Modifier l'environnement de commande : Modifier la commande elle-même pour inclure des paramètres d'environnement spécifiques :
PATH="$PATH;/path/to/sesu" && sesu test
  1. Forcer l'utilisation du pseudo-terminal : (Non recommandé) Activez l'allocation du pseudo-terminal en définissant get_pty sur True :
stdin,stdout,stderr = ssh.exec_command('sesu test', get_pty=True)

Considérations supplémentaires

  • Vérifiez LD_LIBRARY_PATH et assurez-vous qu'il localise avec précision les objets partagés.
  • Référez-vous à ces ressources pour plus d'informations :

    • [Différences de variables d'environnement lors de l'utilisation de Paramiko](https ://stackoverflow.com/questions/13781377/environment-variable-differences-when-using-paramiko)
    • [Certaines commandes Unix échouent avec "... Not Found" dans JSch](https:// stackoverflow.com/questions/44950115/certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn