Основываясь на моем комментарии: моя ставка здесь - это сценарий, который отлично работает, но вы ожидаете увидеть выход сразу и, не заметив, прекратите выполнение программы.
Однако read() остановит ваш скрипт до тех пор, пока команда не завершится. И только тогда произойдет свидание. Таким образом, ни один выход не будет отображаться до тех пор, пока команда не завершится.
Я хотел бы изменить это так:
with os.popen('cleanmgr.exe /sagerun:1') as fd:
chunks = iter(lambda: fd.read(1), '')
for chunk in chunks:
sys.stdout.write(chunk)
Идея заключалась в том, чтобы печатать, как она идет: если указан размер, read
не цикл, пока дескриптор не будет закрыт, он возвращается, как только он читает что нибудь.
Это не самый эффективный здесь, поскольку он будет читать символы один за другим. Для программ, которые вы запускаете, это не имеет большого значения, и чтение большего количества без введения задержек буферизации с помощью python является сложным.
Если вы не используете выход в вашей программе, и просто хотите, чтобы пройти, может быть, вы бы лучше просто звонят:
import subprocess
subprocess.check_call(['cleanmgr.exe', '/sagerun:1'])
без каких-либо дополнительных параметров, выход будет просто пойти к вашему вывода скрипта. Функция ожидает завершения команды до ее возвращения.
Что именно вы ожидаете? – spectras
Вы писали эти сценарии? –
@spectras - мне нужно запустить дефрагментацию диска и очистить диск в фоновом режиме. – user2926827