Проблема передачи вывода bash в скрипт python - PullRequest
2 голосов
/ 26 августа 2009

Я довольно новичок в программировании, и я искал в Интернете способ передать выходные данные bash в скрипт Python.

Я придумал это в bash.

XAS_SVN=`svn info` 
ssh hudson@test "python/runtests.py $XAS_SVN"

И это в питоне.

import sys
print sys.argv[1]

Когда я echo $SVN_INFO получаю результат.

Путь:. URL: // SVN / RND-проекты / тестирование / питон Корень хранилища: // Репозиторий svn / rnd-projects UUID: d07d5450-0a36-4e07-90d2-9411ff75afe9 Редакция: 140 Тип узла: каталог График работы: обычный Последнее изменение Автор: Рой ван дер Валк Последнее изменение Rev: 140 Дата последнего изменения: 2009-06-09 14:13:29 +0200 (вт, 09 июня 2009 г.)

Однако скрипт python просто печатает следующее.

Путь:

Почему это так и как я могу это решить? Переменная $ SVN_INFO не строкового типа?

Я знаю о модуле подпроцесса и функции Popen, но я не думаю, что это решение, поскольку скрипт python выполняется на другом сервере.

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Поскольку у вас есть пробелы в переменной, вам нужно экранировать их или прочитать все аргументы в вашем скрипте:

print ' '.join(sys.argv[1:])

Но может быть лучше использовать stdin / stdout для связи, особенно если в выводе могут присутствовать некоторые символы, которые могут интерпретироваться оболочкой (например, "$"). В скрипте python выполните:

for l in sys.stdin:
     sys.stdout.write(l)

и в оболочке:

svn info | ssh hudson@test python/runtests.py
0 голосов
/ 26 августа 2009

Да, вам нужно заключить в кавычки ваш ввод в python / runtest.py, потому что в противном случае argv [1] получает его только до первого пробела. Как это:

ssh hudson@test "python/runtest.py \"$XAS_SVN\""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...