У меня есть фрагмент bash, который я хотел бы передать на Python. Он находит, где находится SVN, и является ли он исполняемым.Как я могу использовать эту конструкцию теста bash в Python?
SVN=`which svn 2>&1`
if [[ ! -x $SVN ]]; then
echo "A subversion binary could not be found ($SVN)"
fi
Вот моя текущая попытка в Python с помощью модуля подпроцесс:
SVN = Popen('which svn 2>&1', shell=True, stdout=PIPE).communicate()[0]
Popen("if [[ ! -x SVN ]]; then echo 'svn could not be found or executed'; fi", shell=True)
Это не работает, потому что в то время как у меня есть расположение СВН сохраняется в локальном пространстве имен Python, я могу» t получить доступ к нему из Popen.
Я также попытался объединения в один объект POPEN:
Popen("if [[ ! -x 'which svn 2>&1']]; then echo 'svn could not be found'; fi", shell=True)
Но я получаю эту ошибку (и, разумеется, выглядит очень громоздким)
/bin/sh: -c: line 0: syntax error near `;'
/bin/sh: -c: line 0: `if [[ ! -x 'which svn 2>&1']]; then echo 'svn could not be found'; fi'
Есть версия Python теста построить "-x"? Я думаю, это было бы идеально. Также будут оценены и другие способы обхода.
Благодаря
[этот сайт] (http://ubuntuforums.org/showthread.php?t=1457094) предоставляет фрагмент кода, который выглядит как 'commands.getoutput (" если [-x MyFile] \ Nthen эхо верно \ НИЛ ")'. Однако это вряд ли «переносит на Python», поскольку вы все еще ссылаетесь на Bash. – Kos
'os.stat' может предоставить вам некоторую информацию о заданном файле, например о его разрешениях, но я думаю, что вам еще нужно создать над ним« исполняемый файл для текущего пользователя ». – Kos
можете ли вы сохранить команду bash как строку сначала, чтобы вы могли связать ее с переменной SVN? затем передайте это Popen() ... – Jeff