Wenn ich folgendes mache:
import subprocess
from cStringIO import StringIO
subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
Ich bekomme:
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'
Anscheinend quakt ein cStringIO.StringIO-Objekt nicht nahe genug an einer Dateiente, um dem Unterprozess zu entsprechen. Wie kann ich das umgehen?
call(['ls', '-1'], shell=True)
ist falsch. Ich empfehle stattdessen, häufig gestellte Fragen aus der Tag-Beschreibung des Unterprozesses zu lesen . Insbesondere, warum subprocess.Popen nicht funktioniert, wenn args eine Sequenz ist? erklärt warum call(['ls', '-1'], shell=True)
ist falsch. Ich erinnere mich, dass ich Kommentare unter dem Blog-Beitrag hinterlassen habe, aber ich sehe sie jetzt aus irgendeinem Grund nicht.
subprocess.run
siehe stackoverflow.com/questions/48752152/…