python: raise child_exception, OSError: [Errno 2] Aucun fichier ou répertoire de ce type
J'exécute une commande en python à l'aide de sous-processus.popen() la fonction comme suit:
omp_cmd = 'cat %s | omp -h %s -u %s -w %s -p %s -X -' %(temp_xml, self.host_IP, self.username, self.password, self.port)
xmlResult = Popen(omp_cmd, stdout=PIPE, stderr=STDOUT)
Dans la coquille, il fonctionne très bien sans erreur, mais en python-je obtenir:
File "/home/project/vrm/apps/audit/models.py", line 148, in sendOMP
xmlResult = Popen(omp_cmd, stdout=PIPE, stderr=STDOUT)
File "/usr/local/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/local/lib/python2.7/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
J'ai cherché l'erreur, mais aucun n'a résolu mon problème. Personne ne sait quelle est la cause de ce problème? Merci.
source d'informationauteur Shang Wang
Vous devez vous connecter pour publier un commentaire.
Si vous allez passer la commande sous la forme d'une chaîne de
Popen
et si les commandes ont des tuyaux pour d'autres commandes, vous devez utiliser leshell=True
mot-clé.Je ne suis pas particulièrement familier avec la
omp
de commande, mais cela sent beaucoup comme un inutile l'utilisation de la cat. Je pense que la meilleure façon d'y parvenir serait de:Ou, s'il n'est pas inutile d'utiliser de chat (il faut vraiment la pipe le fichier via stdin), vous pouvez le faire avec des sous-processus:
Cette erreur a également eu lieu pour moi aussi avec tox scripts, il s'avère qu'un virtualenv est créé avec tox qui a un asolute chemin à longueur de 96 caractères, mais à chaque fois qu'il prend l'absolu "bin/pip" chemin d'accès de près de 123 caractères, il s'agit d'une invocation d'erreur, OSError2.
'ERREUR: invocation d'échec (errno 2),
OSError: [Errno 2] No such file or directory"
Python: Python 2.7.6
virtualenv:15.1.0
tox: 2.9.1
pip: 9.0.1
ubuntu 14.04
tester a couru avec la couverture: django(1.8-1.11) les tests avec py27, py35 chaque
Résolution:
J'ai créé mon virtualenv(avec abs chemin <=(96-100) caractères) où tox est installé, cloné mon projet pour être utilisé avec cette tox installation et virtualenv, tox crée sa propre virtualenvs maintenant et il fonctionne très bien.
espère que cela aide.