Я пытаюсь создать скрипт Python для компиляции ядра поверхности github, используя рекомендуемые шаги. https://github.com/dmhacker/арх-линукс-поверхность
Пока я застрял в паре разделов.
В соответствии с инструкциями по компиляции setup.sh необходимо запускать с помощью sudo.
Я пытался отправить пароль перед вызовом процесса, используя
preproc = subprocess.Popen(password, shell=True, stdout=subprocess.PIPE)
process = subprocess.Popen(["sudo", 'sh setup.sh'], shell=True, stdin=preproc.stdout, encoding='utf8')
Я пробовал sudo -S, который, похоже, вообще не работает. Я также пробовал строчные буквы -s.
Я пытался изменить subprocess.Popen на subprocess.call
password = getpass.getpass()
process = subprocess.Popen(["sudo", 'sh setup.sh'], shell=True,
stdin=subprocess.PIPE, encoding='utf8')
print(process.communicate(password + "\n"))
process.wait()
Я ожидал, что оболочка будет работать на уровне sudo, но это не так.
Я только что рассмотрел это по вашему предложению. Но это почти лишило бы цель сценария выполнять ручную настройку поверх него.





Я не совсем уверен, в чем разница, поскольку с тех пор я прошел много итераций, но, наконец, заставил его работать и упростить. Надеюсь, это поможет кому-то в будущем.
import getpass
from subprocess import Popen, PIPE
password = getpass.getpass()
command = "./setup.sh"
process = Popen(['sudo', '-S', command], stdout=PIPE, encoding='utf8')
process.communicate(password)
Я думаю, вы не хотите отключать пароль sudo для этого пользователя? Возможно, вы можете сделать это только для этой команды