python subprocess "mount" 不提示输入密码

1 投票
1 回答
1512 浏览
提问于 2025-04-17 07:12

我今天刚学会了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 个回答

4

你现在是在调用 mount 这个命令,但没有给它参数。如果你设置 shell=True,那么 subprocess 就会把整个命令和参数当作一个大字符串传给命令行。相反,如果你设置 shell=False(默认就是这个),那么命令和它的参数会作为一个字符串列表传递,就像你用 split 做的那样。因为你把这两种方式混在一起,所以实际上只把字符串 mount 作为要执行的命令传了过去。你可以选择去掉 shell=True,或者去掉 .split(" ")。通常来说,去掉 shell=True 是更好的选择,除非你有特别的理由需要用到命令行解析,这种情况一般是要避免的。

撰写回答