python subprocess "mount" 不提示输入密码
我今天刚学会了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
是更好的选择,除非你有特别的理由需要用到命令行解析,这种情况一般是要避免的。