2013-12-13 2 views
3

Я бегу эти фрагменты с Python 2.7 на Ubuntu 12.Почему не работает этот subprocess.check_call()?

import subprocess 
args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/'] 
subprocess.check_call(args) 

Сбой

import subprocess 
args = ['rsync', '--rsh="ssh"', '/tmp/a/', '127.0.0.1:/tmp/b/'] 
call_string = ' '.join(args) 
subprocess.check_call(call_string) 

Работы

Первые результаты фрагмент кода в Rsync получение недопустимое командной строки. Использование короткой версии этой опции (-e) не имеет никакого значения. Если я удалю часть --rsh, она отлично работает.

Использование shell=True не имеет значения. Устранение цитат из «ssh» не имеет никакого значения, и я хотел бы сохранить кавычки, чтобы передать аргументы в ssh.

В чем проблема?

+0

2-й команды должны потерпеть неудачу. Если он работает, то где-то 'check_call()' (или функция, которую он использует) была переопределена с помощью 'shell = True'. Попробуйте выполнить первую команду с 'shell = False' (по умолчанию). Посмотрите на 'print (inspect.getsource (subprocess.check_call))' – jfs

+0

Кстати, вам нужна эта опция в первую очередь? Мой 'rsync' всегда использовал' ssh' на ots, который принадлежит в течение последних 10 лет или около того ... – glglgl

+0

@glglglg: В конце я хочу добавить некоторые аргументы в экземпляр ssh, который инициирует rsync. – JivanAmara

ответ

2

Удалить все цитаты ssh; оболочка, как правило, были разобраны те и передается аргумент без котировальный:

import subprocess 
args = ['rsync', '--rsh=ssh', '/tmp/a/', '127.0.0.1:/tmp/b/'] 
subprocess.check_call(args) 
+0

Устранение цитат не имеет никакого значения. – JivanAmara

+1

@JivanAmara: Для чего это стоит, вызов работает для меня, на Debian. –

+0

Какую версию/ОС Python вы используете? – JivanAmara

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