是否可以使用subprocess.Popen与子子进程通信?

dar*_*ckc 5 python subprocess

我正在尝试编写一个包装我们软件的python脚本.这个脚本需要构建我们的产品并打包它.目前我们有其他脚本分别执行每个部分,包括csh和perl脚本.一个这样的脚本运行如下:

sudo mod args
Run Code Online (Sandbox Code Playgroud)

其中mod是perl脚本; 所以在python我会这样做

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE)
Run Code Online (Sandbox Code Playgroud)

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

(stdout, stderr) = proc.communicate(input='y')
Run Code Online (Sandbox Code Playgroud)

会工作.我不认为它有效,因为Popen控制的过程是sudo,而不是提出问题的mod脚本.有没有办法与mod脚本进行通信并仍然通过sudo运行它?

miy*_*iya 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')
Run Code Online (Sandbox Code Playgroud)