subprocess выполнение команды в одном потоке
Пытаюсь выполнить следующий код и получаю ошибку:
zimbra.stdin.write(batch) AttributeError: 'str' object has no attribute 'stdin'
command_8 = "su zimbra".split()
batch = b"""\
cd /opt/zimbra/ssl/letsencrypt/
/opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem
zmcontrol restart
exit
"""
zimbra = subprocess.Popen(["sudo", "-S"] + command_8, stdin=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True).communicate(mypass + '\n')[1]
zimbra.stdin.write(batch)
zimbra.stdin.flush()
result = zimbra.stdout.read()
print(result)
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Ошибку в теме исправить можно так
"""
zimbra = subprocess.Popen(["sudo", "-S"] + command_8, stdin=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
zimbra.communicate(mypass + '\n')
zimbra.stdin.write(batch)
Но communicate убивает процесс. Замени его на stdin.write потом нужно дождаться приглашения шела. Это циклом с read и дальше запускай батник. Но я рекомендовал бы записать все это в файл и запускать батник целиком