#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. Спасибо. Это работает.. как ни странно, похоже, мне придется более внимательно изучить документы, потому что в примерах, которые я видел, не используется «-»