SORU
29 NİSAN 2009, ÇARŞAMBA


Alma gerçek zamanlı çıkış alt süreci kullanarak

Operasyon için iyi bir ilerleme göstergesi görüntülenecek bir komut satırı programı (svnadmin doğrulamak için sarıcı betik yazmaya çalışıyorum. Bu bana sarılmış program çıktısı her satırı görmek mümkün çıktı en kısa sürede olması gerekir.

Sadece bu programı kullanarak alt işlemi çalıştırmak karar verdim.Popen,=BORU stdout, geldiği gibi her satırı okuyun ve buna göre hareket. Ancak, ne zaman kaçtım aşağıdaki kod, çıktı, çıktı için tamponlu bir yerde, neden görünmez iki parçalar, hat 1 ile 332, 333 ile 439 (son çıkış)

from subprocess import Popen, PIPE, STDOUT

p = Popen('svnadmin verify /var/svn/repos/config', stdout = PIPE, 
        stderr = STDOUT, shell = True)
for line in p.stdout:
    print line.replace('\n', '')

Sonra bakıyorsun belgeleri üzerinde alt süreci biraz keşfettiğim tamponboyu parametre için Popen, çok denedim ayar tamponboyu 1 (tampon, her satır) ve 0 (tampon), ama ne değeri görünüyordu değiştirmek için yolu hatları teslim olmak.

Bu noktada payet kavramak için başlamıştım, aşağıdaki çıkış döngü yazdım:

while True:
    try:
        print p.stdout.next().replace('\n', '')
    except StopIteration:
        break

ama aynı sonucu aldı.

Al 'gerçek zamanlı' bir program program çıktı alt süreci kullanılarak yürütülen? mümkün müdür İleriye dönük uyumlu (exec*) Python başka bir seçenek var mı?

CEVAP
29 NİSAN 2009, ÇARŞAMBA


Bunu denedim, ve nedense kodu süre

for line in p.stdout:
  ...

tamponlar agresif, değişken

while True:
  line = p.stdout.readline()
  if not line: break
  ...

değil. Görünüşe göre bu bilinen bir hata: http://bugs.python.org/issue3907

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Google Россия

    Google Ро

    9 Temmuz 2007
  • Attempts at least

    Attempts at

    1 Ocak 2007