2011-01-31 22 views
8

SSH üzerinden bir blok aygıtı DD olacak bir kod üzerinde çalışıyorum ve bunu alt işlemle yapmak istiyorum, böylece aktarım sırasında DD'nin durumunu izleyebilirim. Mevcut durumu elde etmek için SIGUSR1 ile dd süreci ve seçerek kullanarak okuma).İki alt işlem arasındaki Python boru çıkışı

Böyle bir şey olacağını uygulamaya çalışıyorum komut:

dd if=/dev/sda | ssh [email protected] 'dd of=/dev/sda' 

Denedim geçerli yöntem oldu: Bunu çalıştırdığınızda

dd_process = subprocess.Popen(['dd','if=/dev/sda'],0,None,None,subprocess.PIPE, subprocess.PIPE) 
ssh_process = subprocess.Popen(['ssh','[email protected]','dd of=/dev/sda'],0,None,dd_process.stdout) 

Ancak SSH süreci olur 10-40 saniye sonra defunct.
Burada tamamen açık mıyım, yoksa bu gibi alt süreçler arasında boru döşemenin bir yolu yok mu?

Düzenleme: Gerçek kodumda ana bilgisayar adı bulunmadı. Bu, işleri yapmanın doğru yolu.

+1

Sana anahtar tabanlı kimlik doğrulama veya diğer interaktif olmayan mekanizmasını kullanarak umuyorum. –

+0

Açıkçası;) Sadece ilgili ssh argümanını örnekle –

+0

ilgili kısaltmak için çektim: [Subprocess.Popen'i birden çok işlemi borularla bağlamak için nasıl kullanırım?] (Http://stackoverflow.com/q/295459/4279) – jfs

cevap

13

Bu, birinci işlem çıktısını ikinciye doğru BORUYI yoludur. (ssh_process in not stdin)

+0

'grep_process' ?! –

+1

Eh, zaten sahip olduğum şey, ve hala çalışmıyor. Ssh özel olarak hata olduğunda hata: ssh: dd of =/dev/sda: İsim çözünürlüğünde geçici hata –

+1

@Cristian, üzgünüm - ssh_process olmalıdır. @Philip - Hatanın etki alanı ve internet bağlantınızla (example.com olarak verdiğiniz) ilgisi vardır. Doğrudan yapabilir misin? Python kullanmadan mı? –

4

Python kitaplığı, sh Python kitaplığı, OS komutlarını çağırmayı ve bunları yönlendirmeyi kolaylaştırır. belgelerine

:

for line in tr(tail("-f", "test.log", _piped=True), "[:upper:]", "[:lower:]", _iter=True): 
    print(line) 
+0

Bu 'sh' modülü gerçekten güzel. Paylaşım için teşekkürler. – mpontillo

+0

Ama işaretlenmemiş girdiyle kullanmak tehlikeli – LtWorf

İlgili konular