je cette fonction dans mon code:Python ne pense pas que le fichier existe quand il ne
def send_info(self, bfile, output_file_name, tag):
self.command = r"sshpass -p {3} scp -P 5622 {0} {1}@{2}:/home/blender/Documents/blade_queue/".format(str(current_render.blend), self.uname, self.host, self.password)
print self.command
self.response = subprocess.check_output(self.command)
qui imprime:
sshpass -p PASSWORD scp -P PORT /mnt/c/Users/Joseph\ Farah/Documents/python/cross_computer_rendering_gui/src/test.blend [email protected] /home/blender/Documents/blade_queue/
Lorsque je copier et coller cette commande dans ma coquille, cela fonctionne absolument magnifiquement. Cependant, en essayant d'exécuter ceci en Python, on obtient:
OSError: [Errno 2] No such file or directory
Sur cette ligne.
Toute aide serait appréciée! Merci d'avance.
Des documents [] (https://docs.python.org/3/library/subprocess.html): 17.5.2. Considérations sur la sécurité Contrairement à certaines autres fonctions popen, cette implémentation n'appelle jamais implicitement un shell système. Cela signifie que tous les caractères, y compris les métacaractères du shell, peuvent être transmis en toute sécurité aux processus enfants. Si le shell est invoqué explicitement, via shell = True, il est de la responsabilité de l'application de s'assurer que tous les espaces et métacaractères sont correctement cités pour éviter les vulnérabilités d'injection de shell. – JoshuaRLi
Pour un exemple de ce qui pourrait mal se passer: Imaginez que l'utilisateur définisse son mot de passe à '; rm -rf /; '... – jasonharper
Vous voulez passer les arguments comme une' liste' qui est explicitement divisée aux limites des arguments afin que vous puissiez éviter 'shell = True'. Si la commande est '[" sshpass "," -p ", self.password, 'scp', '-P', '5622', str (current_render.blend), '{} @ {}:/home/blender /Documents/blade_queue/'.format(self.uname, self.host)] 'donc tous les arguments sont explicitement passés indépendamment, ce serait à la fois plus rapide et plus sûr. – ShadowRanger