可以使用subprocess.Popen与子进程通信吗?
我正在尝试写一个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脚本。有没有办法在通过sudo运行的同时与mod脚本进行沟通呢?
4 个回答
1
最简单的办法就是用 sudo
来运行控制脚本(也就是那个 Python 脚本)。你能这样做吗?还是说这不是一个可行的选择?
4
我觉得你应该把你在 Popen
调用中用的 sudo
去掉,让使用你脚本的人自己输入 sudo
。
这样做可以更清楚地表明你的脚本需要更高的权限,而不是把这个需求藏在 Popen
里面。
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')