无法获取发送sudo的密码subprocess.Popen()成功的Python为庆典

问题描述 投票:-1回答:1

我试图创建一个python脚本使用他们推荐的步骤编译github上表面内核。 https://github.com/dmhacker/arch-linux-surface

到目前为止,我卡在两节。

每编译必须使用sudo来运行setup.sh的说明。

我在密码使用调用进程之前试过送

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.Popensubprocess.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的水平上运行,但它不是。

python-3.x bash
1个回答
1
投票

我不完全肯定的区别是什么,因为我已经因为经过了许多反复,但最终得到它的工作和简化。希望这可以帮助别人的未来。

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)
© www.soinside.com 2019 - 2024. All rights reserved.