अगर मैं निम्न कार्य करें:पायथन - मैं subprocess.Popen (stdin तर्क का उपयोग कर) में एक स्ट्रिंग कैसे पास करूं?
import subprocess
from cStringIO import StringIO
subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
मैं:
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'
जाहिर है एक cStringIO.StringIO वस्तु एक फ़ाइल बतख के काफ़ी करीब subprocess.Popen सूट करने के लिए नीम हकीम नहीं है। मैं इसके आसपास कैसे काम करूं?
>>> p = subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
>>> p.stdin.write(b'one\ntwo\nthree\nfour\nfive\nsix\n') #expects a bytes type object
>>> p.communicate()[0]
'four\nfive\n'
>>> p.stdin.close()
वहाँ एक बेहतर एक है:
के बजाय इस हटाया जा रहा है, मैं इसे एक टिप्पणी ... अनुशंसित पढ़ने के रूप में जोड़ रहा साथ मेरा उत्तर विवाद: [डौग है Hellmann अजगर सबप्रोसेस पर सप्ताह ब्लॉग पोस्ट का मॉड्यूल] (http://www.doughellmann.com/PyMOTW/subprocess/)। –
ब्लॉग पोस्ट में कई त्रुटियां हैं, उदाहरण के लिए, [पहला कोड उदाहरण: 'कॉल ([' ls ',' -1 '], shell = True) '] (http://www.doughellmann.com/PyMOTW/subprocess /) गलत है। मैं इसके बजाय [subprocess 'टैग विवरण] (http://stackoverflow.com/tags/subprocess/info) से सामान्य प्रश्न पढ़ने की सलाह देते हैं। विशेष रूप से, [क्यों subprocess.Popen काम करता है जब तर्क अनुक्रम है?] (Http://stackoverflow.com/q/2400878/4279) बताता है कि क्यों 'कॉल ([' ls ',' -1 '], खोल = सही) 'गलत है। मुझे ब्लॉग पोस्ट के तहत टिप्पणियां छोड़ना याद है लेकिन मैं उन्हें किसी कारण से नहीं देखता हूं। – jfs