0

我正在开发一个安装程序脚本的自动化,其中安装程序被编写为 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 方库。

在处理这个问题时,我提出了以下疑问:

  1. 是否有机会使用 shell=False 执行 shell 命令(我收到 File not found 异常),在这种情况下它真的对我有帮助吗?
  2. 有什么方法可以将密码作为不是 shell 的单独进程输入,但是如何使用 out 命令启动进程?
  3. 为什么输入密码不被视为 shell 命令或者我还缺少什么?

请建议是否有人在 python 和安装程序脚本中工作。

4

0 回答 0