2016-07-21 8 views
0

У меня есть сервер django, и я должен загрузить некоторые данные через scp. У меня есть этот вид:Захват вывода scp из python

pathFile = '/home/user1/foo.json' 
user = 'user1scp' 
server = 'someserver.com' 
pathServer = '/var/www/foo.json' 

os.system("scp %s %[email protected]%s:%s" % (pathFile, user, server, pathServer)) 

В окне консоли где страница работает (т.е. там, где я назвал команду «runserver») Я показал этот вывод:

[21/Jul/2016 18:55:12] "GET /someurl/upload HTTP/1.1" 301 0 
foo.json           100% 609  0.6KB/s 00:00 

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

Я пробовал решение в этом ответе How to capture stdout output from a Python function call?, но это не сработало. Я попробовал Popen и подпроцесс и не имел никаких результатов. Может быть, я делаю что-то не так?

ответ

1

Это не отвечает на ваш вопрос напрямую, но я не буду выполнять команду raw scp в python, потому что результат сложный для синтаксического анализа, даже если он у вас есть. Вы должны рассмотреть возможность использования таких инструментов, как fabric. Это pythonic, и вы полностью контролируете ввод/вывод. Операцией, равной scp, является put. Например, вы можете проверить это SO answer.

Практически все операции с командной строкой могут быть выполнены с использованием fabric, вы не пожалеете об этом изучении.

Смежные вопросы