我正在尝试编写一个打包我们软件的python脚本。这个脚本需要构建我们的产品并打包它。目前我们有其他脚本分别执行每个部分,包括csh和perl脚本。一个这样的脚本运行如下:
sudo mod args
其中mod是perl脚本;所以在python我会做
proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE)
问题是这个mod脚本需要回答几个问题。为此,我认为是传统的
(stdout, stderr) = proc.communicate(input='y')
会奏效。我不认为它有效,因为Popen控制的过程是sudo,而不是提出问题的mod脚本。有没有办法与mod脚本通信并仍然通过sudo运行它?
答案 0 :(得分:4)
我认为您应该删除sudo
来电中的Popen
,并要求 脚本的用户输入sudo
。
这使得在脚本中提升权限的需求更加明确,而不是将其隐藏在Popen
内。
答案 1 :(得分:4)
我会选择使用Pexpect。
import pexpect
child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q')
child.expect ('First question:')
child.sendline ('Y')
child.expect ('Second question:')
child.sendline ('Yup')
答案 2 :(得分:1)
最简单的方法是通过sudo
运行控制脚本(Python脚本)。你能做到这一点,还是不是一个选择?
答案 3 :(得分:0)
我们需要更多信息。
因为这些东西在管道上没有正常处理。
这两者的解决方案可能是Pexpect,它在处理要求密码的有趣脚本以及各种其他输入问题时非常专业。