5

我正在尝试编写一个打包我们软件的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)

问题是这个模组脚本需要回答几个问题。为此,我认为传统的

(stdout, stderr) = proc.communicate(input='y')

会工作。我认为它不起作用,因为 Popen 控制的过程是 sudo,而不是提出问题的 mod 脚本。有什么方法可以与 mod 脚本通信并仍然通过 sudo 运行它?

4

4 回答 4

4

sudo我认为您应该在Popen通话中删除 ,并要求脚本的用户键入sudo.

这也使脚本中提升权限的需求更加明确,而不是将其隐藏在Popen.

于 2008-10-30T16:26:41.877 回答
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')
于 2008-10-30T23:10:26.727 回答
1

最简单的做法是通过sudo. 你能做到吗,或者那不是一个选择?

于 2008-10-30T16:22:51.353 回答
0

我们需要更多信息。

  1. sudo 是否要求您输入密码?
  2. mod脚本有什么样的提问界面?

因为这些事情不是通过管道正常处理的。

这两种情况的解决方案可能是Pexpect,它非常擅长处理要求密码的有趣脚本以及各种其他输入问题。

于 2008-10-30T17:29:43.060 回答