i aşağıdaki gibi bir yapısı vardır: Buradazincirleme POPEN subprocesses düzgün
os.mkfifo('pipe.tmp')
enc = Popen(['encoder', '-i', 'pipe.tmp'])
cap = Popen(['capture', '-f', 'pipe.tmp'])
cap
normalde (-f
tarafından belirtilen) bir dosyaya yazan bir süreçtir, ama ekrana veri kusmak alabilirsiniz çıktı dosyası olarak /dev/stdout
sağlayarak. benzer şekilde, enc
dosya benzeri bir nesneden okunmasını bekler ve giriş olarak -
sağlayarak boruyu okumayı başarabiliyorum. bunun yerine os bir adlandırılmış yöneltme kullanmak yerine, ben böyle isimsiz boru kullanabilirsiniz özel dosya gerekli olmayabilir düşünce ..
cap = Popen(['capture', '-f', '/dev/stdout'], stdout=PIPE)
enc = Popen(['encoder', '-i', '-'], stdin=cap.stdout)
cap.stdout.close()
(ayrıca not yumurtlama düzeninin tersine). Bunu daha iyi seviyorum çünkü geçici bir dosya gereksiz görünüyor, ancak bu yapının süreçleri beklediğim şekilde zincirleyip zincirlemeyeceği konusunda biraz endişeliyim.
- OS fiili Stdout'a farklı konuşuyor
/dev/stdout
cap
bu?enc
'da-
giriş borusuyla, diğer süreçler işletim sisteminde/dev/stdout'a uzaklaşsa bile, bu iki süreç arasında temiz bir veri kanalı alacağım? - Engelleme/sıraya alma davranışlarında önemli farklılıklar olacak mı? İlk örneğimde, adlandırılmış borunun arabelleğe alınmış bir 4096 bayt olacağını ve
cap
/enc
'un yeterince hızlı yazma/okuma yapmamanız halinde her iki uçta da bloke olacağını, ancak yanılıyorsam beni düzelteceğini düşünüyorum. - herhangi bir özel yumurtlama veya terminasyon siparişi ya da bilmem gereken diğer herhangi bir toplama var mıdır? Bunu kullanmak sadece iyi olmalı, böylece