Votre syntaxe de commande est incorrecte, ce qui génère l'exception. Vous voulez appeler mono i2c.exe
, de sorte que votre liste de commande devrait ressembler à:
subprocess.check_output(['mono', 'i2c.exe']) # Notice the comma separation.
Effectuez les opérations suivantes:
import subprocess
import os
executable = "/home/pi/pi_sensors-master/bin/Release/i2c.exe"
print subprocess.check_output(['mono', executable])
Le sudo
est pas un problème aussi longtemps que vous donnez le chemin complet vers le fichier et vous êtes sûr que l'exécution de la commande mono
fonctionne comme sudo
.
je peux générer la même erreur en faisant une ls -l
:
>>> subprocess.check_output(['ls -l'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Toutefois, lorsque vous vous séparez la commande des options:
>>> subprocess.check_output(['ls', '-l'])
# outputs my entire folder contents which are quite large.
Je conseille vivement d'utiliser le subprocess.Popen
-objet de traiter avec des processus externes. Utilisez Popen.communicate()
pour obtenir les données à la fois stdout
et stderr
. De cette façon, vous ne devriez pas rencontrer de problèmes de blocage.
import os
import subprocess
executable = "/home/pi/pi_sensors-master/bin/Release/i2c.exe"
proc = subprocess.Popen(['mono', executable])
try:
outs, errs = proc.communicate(timeout=15) # Times out after 15 seconds.
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
Ou vous pouvez appeler le communiquer dans une boucle si vous voulez un 'flux de données' de sorte, an answer from this question:
from subprocess import Popen, PIPE
executable = "/home/pi/pi_sensors-master/bin/Release/i2c.exe"
p = Popen(["mono", executable], stdout=PIPE, bufsize=1)
for line in iter(p.stdout.readline, b''):
print line,
p.communicate() # close p.stdout, wait for the subprocess to exit
'i2c.exe'-t mono sudo du travail terminal? – msvalkon
oui cela fonctionne – Hamoudy
voici la sortie du terminal: http://prntscr.com/3xy211 – Hamoudy