我正在开发一个安装程序脚本的自动化,其中安装程序被编写为 shell 脚本,并且将以交互方式。代码如下图:
print "Installing the build using command: \n" + str(cmd)
proc = Popen(cmd,
stdin=PIPE,
stdout=PIPE,
stderr=PIPE,
shell=True
)
proc.stdin.flush()
proc.stdin.write("y\n")
proc.stdin.flush()
proc.stdin.write("y\n")
proc.stdin.flush()
proc.stdin.write("root\n")
print "Aftre user name"
proc.stdin.flush()
proc.stdin.write("password\n")
proc.stdin.flush()
(stdout, stderr) = proc.communicate("\n")
print "Build %s is installed successfully" % build
proc.stdin.close()
print stderr
print stdout
在手动执行命令时,我们将看到如下输出:
press y to continue or c to cancel:
.
.
press y to continue or c to cancel:
.
.
Enter Mysql user name:
Enter password:
但是最后一个标准输入(用于输入密码的代码)不起作用。原因可能是安装程序脚本中没有写入输入密码命令。它是 mysql -p 命令的输出。
由于某些原因,我们没有存储 mysql 密码。因此密码不会直接作为命令中的参数发送。最重要的是我不能使用 3rd 方库。
在处理这个问题时,我提出了以下疑问:
- 是否有机会使用 shell=False 执行 shell 命令(我收到 File not found 异常),在这种情况下它真的对我有帮助吗?
- 有什么方法可以将密码作为不是 shell 的单独进程输入,但是如何使用 out 命令启动进程?
- 为什么输入密码不被视为 shell 命令或者我还缺少什么?
请建议是否有人在 python 和安装程序脚本中工作。