从python捕获scp的输出

时间:2016-07-21 15:08:54

标签: python django scp

我有一个django服务器,我必须通过scp上传一些数据。我有这个观点:

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

os.system("scp %s %s@%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和subprocess,也没有结果。也许我做错了什么?

1 个答案:

答案 0 :(得分:1)

这并没有直接回答你的问题,但我不会在python中执行原始的scp命令,因为即使你有输出也难以解析输出。您应该考虑使用fabric之类的工具来处理这个问题。它是pythonic,你可以完全控制输入/输出。与scp相同的操作是put。例如,您可以查看SO answer

几乎所有命令行操作都可以使用fabric完成,你不会后悔学习它。