Escape ‘ в Python

#python #git

#python #git

Вопрос:

Какой правильный код для этого случая:

 p = subprocess.Popen(["git", "log" , "-1",  "--pretty=format:'%s %n%n%b'", hash], 
  stdout=subprocess.PIPE)
out, err = p.communicate()
print out
message  = 'n'   out
  

Я всегда получаю эту ошибку:

 fatal: ambiguous argument '': unknown revision or path not in the working tree.
output: Use '--' to separate paths from revisions
  

и я нахожусь в рабочем дереве.

Ответ №1:

Поскольку вызов не анализируется оболочкой, вам вообще не нужны кавычки:

 p = subprocess.Popen(
    ["git", "log" , "-1",  "--pretty=format:%s %n%n%b", hash],
    stdout=subprocess.PIPE)
  

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

1. git использует этот формат —pretty=format:’%s %n%n%b'» поэтому мне нужно »

2. @user1033964: Нет, они вам не нужны. Они нужны вам только при вызове git из командной строки, чтобы предотвратить обработку командной строки и разделение параметров. Оболочка удалит кавычки, и git их не увидит.

3. но та же ошибка: фатальная: неоднозначный аргумент «: неизвестная редакция или путь, отсутствующий в рабочем дереве.

4. @user1033964: Вероятно, ошибка связана с тем, что hash является пустой строкой.

Ответ №2:

Я не уверен, хотите ли вы включить обратную косую черту или нет, поэтому я просто поместил это здесь

 >>> s = "--pretty=format:'%s %n%n%b'"
>>> print s
--pretty=format:'%s %n%n%b'
>>> s2 = "--pretty=format:'%s %n%n%b'"
>>> print s2
--pretty=format:'%s %n%n%b'
>>> s3 = "--pretty=format:\'%s %n%n%b\'"
>>> print s3
--pretty=format:'%s %n%n%b'