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

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

DDD
Libérer: 2024-10-21 06:58:30
original
847 Les gens l'ont consulté

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"
Copier après la connexion
  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
Copier après la connexion
  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)
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal