Команда find с exec в подпроцессе python выдает ошибку
Я пытаюсь выполнить следующую команду с помощью модуля подпроцесса (Python)
/usr/bin/find <filepath> -maxdepth 1 -type f -iname "<pattern>" -exec basename {} \;
Но это дает следующую ошибку:
/usr/bin/find: missing argument to `-exec'
Я предполагаю, что это связано с побегом некоторых персонажей. Но не понимаю, как преодолеть это.
Любая помощь приветствуется. Благодарю.
3 ответа
Помог ответ на другой вопрос: /questions/44445011/ekvivalent-python-dlya-poiska-exec/44445020#44445020
import subprocess
subprocess.Popen(('find', '/tmp/mount', '-type', 'f',
'-name', '*.rpmsave', '-exec', 'rm', '-f', '{}', ';'))
То, что я не мог понять, это то, что точку с запятой не нужно было экранировать, так как обычно точка с запятой интерпретируется с помощью bash и должна быть экранирована.
В bash это равнозначно:
find /tmp/mount -type f -name "*.rpmsave" -exec rm -f {} \;
Еще один совет: использование синтаксиса r'bla'позволяет использовать обратную косую черту без кавычек:
r'... -exec basename {} \;'
Обеспечивает лучшую читаемость.
Помнишь побег "
требуется, а также бежать \
раньше использовался ;
также требуется
ваша команда может выглядеть примерно так:
p1 = subprocess.Popen(["/usr/bin/find", "<filepath> -maxdepth 1 -type f -iname \"<pattern>\" -exec basename {} \\;"])
p1.communicate()