У меня действительно странная ошибка с функцией python subprocess.check_call()
. Вот два теста, которые должны завершиться ошибкой из-за проблем с правами доступа, но первый возвращает только «использование» («неожиданное поведение»):
# Test #1
import subprocess
subprocess.check_call(['git', 'clone', 'https://github.com/achedeuzot/project',
'/var/vhosts/project'], shell=True)
# Shell output
usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[-c name=value] [--help]
<command> [<args>]
The most commonly used git commands are:
[...]
Теперь для второго теста («ожидаемое поведение»):
# Test #2
import subprocess
subprocess.check_call(' '.join(['git', 'clone', 'https://github.com/achedeuzot/project',
'/var/vhosts/project']), shell=True)
# Here, we're making it into a string, but the call should be *exactly* the same.
# Shell output
fatal: could not create work tree dir '/var/vhosts/project'.: Permission denied
Эта вторая ошибка является правильной. У меня действительно нет разрешений. Но почему между этими двумя вызовами есть разница? Я думал, что использование одной строки или списка аналогично функции check_call()
. Я прочитал документацию по python и различные примеры использования, и оба выглядят правильно.
У кого-нибудь была такая же странная ошибка? Или кто-нибудь знает, почему есть разница в выводе, когда команды должны быть одинаковыми?
Дополнительные примечания: Python 3.4