使用shell = False通过子进程执行shell命令

时间:2013-10-21 18:20:38

标签: python mysql shell installer subprocess

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

但是最后一个stdin(用于输入密码的代码)不起作用。原因可能是输入密码命令未写入安装程序脚本。它是mysql -p命令的输出。

由于某些原因我们没有存储mysql密码。因此密码不会直接作为参数发送到命令中。最重要的是我不能使用第三方库。

在研究这个问题时,我想出了以下疑问:

  1. 是否有机会使用shell = False执行shell命令(我发现找不到文件异常),这种情况对我有帮助吗?
  2. 有没有办法输入密码作为单独的进程,而不是shell但是如何使用out命令启动进程?
  3. 为什么输入密码不被视为shell命令或者我还缺少什么?
  4. 请建议是否有人使用python和安装程序脚本。

0 个答案:

没有答案