Я бегу эти фрагменты с 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.
В чем проблема?
2-й команды должны потерпеть неудачу. Если он работает, то где-то 'check_call()' (или функция, которую он использует) была переопределена с помощью 'shell = True'. Попробуйте выполнить первую команду с 'shell = False' (по умолчанию). Посмотрите на 'print (inspect.getsource (subprocess.check_call))' – jfs
Кстати, вам нужна эта опция в первую очередь? Мой 'rsync' всегда использовал' ssh' на ots, который принадлежит в течение последних 10 лет или около того ... – glglgl
@glglglg: В конце я хочу добавить некоторые аргументы в экземпляр ssh, который инициирует rsync. – JivanAmara