Проблемы скриптинга Unison с Python - PullRequest
1 голос
/ 21 октября 2009

Я пытаюсь сделать простой скрипт для автоматизации и регистрации синхронизации через Unison. Я также использую subprocess.Popen вместо обычного системного вызова os.sc, поскольку он устарел. Я провел последние 2 дня, просматривая документы и тому подобное, пытаясь выяснить, что я делаю неправильно, но по какой-то причине, если я вызываю унисон с терминала, это не проблема, но когда я делаю тот же вызов из Python пытается взаимодействовать с пользователем, и, кроме того, я не собираю, а около половины вывода, другой все еще печатает на терминал.

Вот мой код, который я пытаюсь использовать:

sync = Popen(["unison", "sync"], shell = True, stdout = PIPE)

for line in sync.stdout
    logFile.write(line)

sync.wait()

if sync.returncode == 0 or sync.returncode == None:
    logFile.write("Sync Completed Successfully\n")
else
    logFile.write("!! Sync Failed with a returncode of: " + str(sync.returncode) + "\n")

Вот мой конфигурационный файл Unison:

root = /home/zephyrxero/temp/
root = /home/zephyrxero/test/

auto = true
batch = true
prefer = newer
times = true
owner = true
group = true
retry = 2

Что я делаю не так? Почему все выходные данные Unison не сохраняются в моем лог-файле и почему он запрашивает подтверждение при запуске сценария, а не когда я запускаю его явно из терминала?

UPDATE: Хорошо, благодаря Эмилю, я теперь собираю все выходные данные, но все еще не могу понять, почему ввод "унисон-синхронизации" в терминал дает другие результаты, чем при вызове его из моего скрипта.

Ответы [ 2 ]

1 голос
/ 21 октября 2009

Наиболее вероятный виновник в том, что унисон отправляет некоторый вывод в stderr вместо простого stdout. Popen принимает дополнительный аргумент stderr, поэтому вы можете попытаться захватить его вместо (или в дополнение к) stdout).

Для быстрого ознакомления с стандартными потоками см. Википедия .

0 голосов
/ 21 октября 2009

Изменено ["unison", "sync"] на просто ["unison sync"] ... кажется, теперь работает без необходимости взаимодействия с пользователем, не уверен, почему это будет иначе ... но работает для меня .

...