2015-06-04 2 views
1

Я пытаюсь следующую команду:не могу сделать "Sudo су - Postgres" с subprocess.call

subprocess.call(['sudo', 'su - postgres'], shell=True) 

или

subprocess.call(['sudo', 'su', '-', 'postgres'], shell=True) 

в python2.7 (либо ipython вручную писать строку, или python myfile.py является линия, как часть кода), а также получить информацию об использовании Sudo:

usage: sudo [-D level] -h | -K | -k | -V 
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user 
     name|#uid] 
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user 
     name] [-u user name|#uid] [-g groupname|#gid] [command] 
usage: sudo [-AbEHknPS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u 
     user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>] 
usage: sudo -e [-AknS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u 
     user name|#uid] file ... 

Я могу запустить команду в оболочке без каких-либо проблем. Оба раза это одна и та же оболочка.

Q: Что я делаю неправильно?

+0

Не помещает ли список аргументов последовательно? – Zizouz212

+0

Подождите. Есть много других способов подключения к postgres. Почему вы используете это? BTW, чтобы решить вашу проблему, вы можете выполнить 'subprocess.call (['sudo su - postgres'], shell = True)' –

ответ

4

Из subprocess docs:

арг требуется для всех вызовов и должен быть строкой, или последовательность аргументов программы. Обычно предлагается последовательность аргументов, так как она позволяет модулю заботиться о любом требуемом экранировании и цитировании аргументов (например, разрешать пробелы в именах файлов). Если передать одну строку, либо оболочка должна быть Истиной (см. Ниже), либо строка должна просто называть исполняемую программу без указания каких-либо аргументов.

Следовательно, ваш список - это действительно последовательность. Для одной команды просто поместите строку вместе, так как нет необходимости ее разделять:

subprocess.call(['sudo su - postgres'], shell=True) 
+1

Решает проблему <3. 1 минута, чтобы принять ... –

Смежные вопросы