python子进程“mount”不提示输入密码

时间:2011-11-28 05:18:13

标签: python subprocess

我今天刚刚学习了subprocess.check_call()函数。我打算用它来替换我的os.system命令。

最初,我有这样的命令:

os.system("mount -t cifs //source/share /mnt/share -o username=user")

上面的命令将提示输入密码,如果密码正确,它将挂载驱动器。

但是,如果我尝试了:

cmd_string="mount -t cifs //source/share /mnt/share -o username=user"

subprocess.check_call(cmd_string.split(" "), shell=True, stdin=sys.stdin)

它不会要求输入密码。相反,它只是打印分区。这就像调用没有参数的“mount”命令。

知道如何使用check_call并仍然接收用户的交互式输入吗?

1 个答案:

答案 0 :(得分:4)

在没有参数的情况下调用mount。如果指定shell=Truesubprocess期望包含参数的整个命令作为一个大字符串传递给shell。如果指定shell=False(默认情况下未指定),则命令及其参数将作为字符串列表传递,就像使用split一样。通过混合这两种形式,您实际上只是将字符串mount作为要执行的命令传递。删除shell=True或删除.split(" ")。第一种选择通常更好,除非有某些原因需要涉及shell解析,通常需要避免。