Я использую модуль подпроцесса для вызова внешней программы (plink.exe) для вхождения в сервер; но когда я звоню, связываются для чтения вывода, он блокируется. Код ниже:
import subprocess
process = subprocess.Popen('plink.exe hello@10.120.139.170 -pw 123456'.split(), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print process.communicate() #block here
Я знаю, что блок то, потому что plink.exe
это все еще выполнение; но я должен считать вывод, прежде чем подпроцесс завершится. Там должен так или иначе сделать это?
Вся цель метода сообщает
метода - ждать, пока процесс завершится и вернуть все выходные данные. Если вы не хотите ждать, не звоните общаться
. Вместо этого прочитайте из stdout
или stderr
атрибут для чтения вывода.
Если процесс выходов процесса как STDOUT
и STDERR
(и вы хотите прочитать его отдельно), вам придется быть осторожен, чтобы фактически читать как без блокировки, либо вы, либо может тупик. Это довольно сложно в окнах, и вместо этого вы можете использовать модуль PEXPECT
.