подпроцесс python "mount" не запрашивает пароль - PullRequest
1 голос
/ 28 ноября 2011

Я только что узнал функцию 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 голосов
/ 28 ноября 2011

Вы вызываете mount без параметров.Если вы укажете shell=True, subprocess ожидает, что вся команда, включая аргументы, будет передана оболочке как одна большая строка.Если вы укажете shell=False (по умолчанию, если не указан), команда и ее аргументы передаются в виде списка строк, как вы это сделали, используя split.Смешивая две формы, вы фактически передаете только строку mount в качестве команды для выполнения.Либо удалите shell=True, либо удалите .split(" ").Первый выбор, как правило, лучше, если только по какой-то причине вам не нужен синтаксический анализ оболочки, обычно этого следует избегать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...