2016-03-23 25 views
0

Telnet ile bir veri kaydedici ile iletişim kurmak istiyorum. Bu nedenle, aşağıdaki python-senaryo yazdı: komut çalıştırarakPython ile Plink penceresinin kapatılması

import subprocess 

command ='plink.exe -telnet -P 23 12.17.46.06' 

p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, shell=False) 

answer = p.communicate('command')[0] 
print answer 

, bir plink-pencere açılır. Python betiği, plink komut penceresinin içinde bazı eylemlerin yapılmasını bekler gibi görünüyor. Pencereyi manuel olarak kapatarak, istenen "cevap" python içinde görünür.

Python'u doğrudan python'dan kapatmak için bir komut/yordam arıyorum. Sadece alt süreçleri kapatmak için yeterli görünmüyor, çünkü bu durumda sadece plython ile plink arasındaki iletişim plink.exe programının kendiliğinden kapanmıyor.

Herhangi bir yardım için teşekkür ederiz! Saygılarımızla, Phil

cevap

2

communicate() işlevinin belgeleri aşağıdakileri bildiriyor: İşlemin sonlandırılmasını bekleyin. Böylece, işlev plink.exe çıkana kadar geri dönmez ve böylece programınız o ana kadar çıktı almaz.

Telnet bağlantısını kapatacak olan 'command' ürününe eklemelisiniz. Uzak uç telnet bağlantısını kapattığında plink.exe çıkacak ve penceresi kapanacaktır. Telnet oturumunuz bir unix kabuğu çalıştırıyorsa, ekleyebilirsiniz; komutundan 'çık.

+0

İletişim() - komutunun açıklaması için teşekkürler. Bununla birlikte, soru doğrudan pythondan nasıl plinkhondan çıkılacağından kaynaklanmaktadır. Python betiği Windows 7 64-bit'te çalışır. –

+0

Sorunuz bir [XY Problem] 'dir (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Bağlantı kapatıldığında plink çıkacaktır. Onu ne zaman öldüreceğini * nasıl bileceksin? İsterseniz ['.kill()'] diyerek onu öldürebilirsiniz (https://docs.python.org/3/library/subprocess.html#subprocess.Popen.kill). Elbette, programınız işlemin sona erdirilmesini beklerken engellenirken hiçbir şey yapamaz. Ya çoklu işlenmeyi öğrenmek (hata yapmadan yapılması çok zordur) ya da iletişim kurmak için zaman aşımı sağlamak veya boruyu yönetmek için engelleyici olmayan bir yaklaşım kullanmak isteyeceksiniz. – dsh

+0

Tamam, o zaman sorunumu yeniden formüle etmeliyim: plinkhon ** ile kurulan telnet bağlantısını python ** ile nasıl öldürebilirim? Zaman aşımı ile ilgili öneriniz benim için yeterli olacaktı. Bununla birlikte, daha önce de belirttiğim gibi, python'dan plink'ten, plink'in kendi telnet bağlantısına değil, plink'e geçişini sonlandırabilirim. –

0

Sen plink tünelin içinde görev tamamlandığında olup olmadığını kontrol ve sonra komut dosyası içinde

şey gibi
KillProg = taskkill /f /fi "imagename eq plink.exe"
p.communicate ('KillProg') [0]

Taskkill yürütebilirsiniz

Bu, tüneli açıkken diğer komutları yürütmek için açıkken alanı keser.

İlgili konular