2 EKİM 2008, PERŞEMBE
Python - Nasıl alt süreci içine bir dize geçmek.Popen (stdin argümanı kullanarak)?
Eğer aşağıdaki yaparsam:
import subprocess
from cStringIO import StringIO
subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0]
Anlıyorum:
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'
Görünüşe göre bir cStringİO.StringİO nesne yeterince yakın alt işlemi uygun bir dosya ördek şarlatan değil.Popen. Bu nasıl bir çözüm?
CEVAP
3 EKİM 2008, Cuma
Popen.communicate()
belgeler:
Eğer veri göndermek istiyorsanız unutmayın işlemin stdin, gerek bu Popen ile nesne yaratmak stdin=BORU. Benzer şekilde, bir şey almak için sonuç olarak Hiçbiri başlığın dışında stdout=BORU ve/veya vermelisin stderr=BORU da.
İşletim sistemi değiştiriliyor.* popen
pipe = os.popen(cmd, 'w', bufsize)
# ==>
pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
Uyarıİletişim() kullanmak yerine stdin.(yaz), stdout.() okuma ya stderr.() okuma kilitlenmeleri önlemek amacıyla diğer OS boru tamponlar için dolduruyor ve çocuk engelleme süreç.
Örnek aşağıdaki gibi yazılabilir
from subprocess import Popen, PIPE, STDOUT
p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0]
print(grep_stdout.decode())
# -> four
# -> five
# ->
Bunu Paylaş:
Nasıl bir dize python kullanarak bir k...
Nasıl Windows Python kullanarak panoya...
Nasıl bir dize bir sayı (yüzen) olup o...
Nasıl rastgele bir liste Python kullan...
Nasıl dize Python küçük harfe dönüştür...