subprocess.check_output(cmd) не выполняется для параметра tar -C.

#python-3.x #subprocess

#python-3.x #подпроцесс

Вопрос:

Я пытаюсь выполнить следующую команду, используя subprocess.check_output() . Команда (показанная ниже) отлично работает, если выполняется непосредственно в bash :

 tar -C /tmp/models/  -czvf model.tar.gz .
 

Он также работает нормально, если я не использую опцию «C» при запуске через подпроцесс.

 cmd = ['tar', 'czf', "/tmp/model.tar.gz", "/tmp/models/"]
output = subprocess.check_output(cmd).decode("utf-8").strip() # Works
 

Но когда я пытаюсь использовать опцию -C с помощью приведенной выше команды tar, я получаю исключение, в котором говорится tar: Must specify one of -c, -r, -t, -u, -x .

 cmd = ['tar', 'C', '/tmp/models', 'cf', 'model.tar.gz', '.'] # fails. Other variations of this fail too.
 

Как мне правильно выполнить приведенную выше команду tar, используя подпроцесс?. Спасибо.

Я использую python3.8

Ответ №1:

Похоже, что тире - должны быть указаны:

 $ tar C whatever czvf thing.tar .
tar: Must specify one of -c, -r, -t, -u, -x

$ tar C whatever -czvf thing.tar .
tar: could not chdir to 'whatever'
 

Таким образом, команда должна выглядеть следующим образом:

 cmd = ['tar', '-C', '/tmp/models', '-cf', 'model.tar.gz', '.']
 

Комментарии:

1. Спасибо. Это работает.. как ни странно, похоже, мне придется более внимательно изучить документы, потому что в примерах, которые я видел, не используется «-»