2017-08-10 1 views
0

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.

Répondre

1

Compris. J'avais besoin d'ajouter shell=True à la commande. Est-ce que quelqu'un sait si cela va causer des failles de sécurité?

commande Edited:

self.response = subprocess.check_output(self.command, shell=True) 
+2

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

+0

Pour un exemple de ce qui pourrait mal se passer: Imaginez que l'utilisateur définisse son mot de passe à '; rm -rf /; '... – jasonharper

+0

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