Si je fais ce qui suit:
import subprocess
from cStringIO import StringIO
subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
Je reçois:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 830, in _get_handles
p2cread = stdin.fileno()
AttributeError: 'cStringIO.StringI' object has no attribute 'fileno'
Apparemment, un objet cStringIO.StringIO ne s'active pas assez près d'un canard de fichier pour convenir à subprocess.Popen. Comment contourner cela?
call(['ls', '-1'], shell=True)
est incorrect. Je recommande plutôt de lire les questions courantes de la description des balises du sous-processus . En particulier, pourquoi subprocess.Popen ne fonctionne pas lorsque args est une séquence? explique pourquoi a call(['ls', '-1'], shell=True)
tort. Je me souviens d'avoir laissé des commentaires sous le blog, mais je ne les vois pas maintenant pour une raison quelconque.
subprocess.run
voir stackoverflow.com/questions/48752152/…