- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在 python 中创建一个 rdiff-backup 包装程序,用于将 windows 机器备份到 linux 服务器。
我想在包装程序中处理 rdiff-backup 的输出。但是当使用子进程模块执行 rdiff-backup 并将 stdout 和 stderr 输送到包装器时,stdout 总是在管道的末端结束。
在不通过管道传输 stdout 和 stderr 的情况下使用子进程时,会在控制台中以正确的顺序打印。
我还注意到,当在本地使用 rdiff-backup 而不是使用 ssh 管道时,stdout 和 stderr 的顺序是正确的。 Rdiff-backup 还使用 subprocess.popen 打开 ssh session 并将数据通过管道传输到服务器。我怀疑由于某种原因,stdout 被阻塞,直到 ssh session 关闭。
这是我的代码,这是真实程序使用线程来监听标准输出的简化版本:
import sys
import subprocess
class Rdiffbackup(object):
def __init__(self):
#self.io_q = Queue()
self.exe = 'F:\\workspace\\pysubprocess\\bin\\rdiff-backup\\rdiff-backup.exe'
self.verbosity = '-v5'
self.ssh_exe = './bin/openssh/bin/ssh'
self.quiet = '-q'
self.compression = '-C'
self.port = '-p 5555'
self.key = '-i ./keys/rdiffbackup'
self.options = '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
self.remote_schema = self.ssh_exe + ' ' + self.quiet + ' ' + self.compression + ' ' + self.port + ' ' + self.key + ' ' + self.options + ' %s rdiff-backup --server'
def start(self,source,dest):
with subprocess.Popen([self.exe,self.verbosity,'--remote-schema',self.remote_schema,source,dest],stdout=subprocess.PIPE,stderr=subprocess.STDOUT) as self.proc:
for line in self.proc.stdout:
sys.stdout.write(line.decode("utf-8"))
if __name__ == '__main__':
rdb = Rdiffbackup()
source = "C:/Users/vdrmrt/Desktop/data"
dest = "vdrmrt@hostname::backup"
rdb.start(source,dest)
输出:
-----------------------------------------------------------------
Detected abilities for source (read only) file system:
Access control lists Off
Extended attributes Off
Windows access control lists On
Case sensitivity Off
Escape DOS devices Off
Escape trailing spaces Off
Mac OS X style resource forks Off
Mac OS X Finder information Off
-----------------------------------------------------------------
Unable to import win32security module. Windows ACLs
not supported by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0
escape_dos_devices not required by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0
-----------------------------------------------------------------
Detected abilities for destination (read/write) file system:
Ownership changing Off
Hard linking On
fsync() directories On
Directory inc permissions On
High-bit permissions On
Symlink permissions Off
Extended filenames On
Windows reserved filenames Off
Access control lists On
Extended attributes On
Windows access control lists Off
Case sensitivity On
Escape DOS devices Off
Escape trailing spaces Off
Mac OS X style resource forks Off
Mac OS X Finder information Off
-----------------------------------------------------------------
Backup: must_escape_dos_devices = 0
Using rdiff-backup version 1.2.8
Executing ./bin/openssh/bin/ssh -q -C -p 5555 -i ./keys/rdiffbackup -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null vdrmrt@hostname rdiff-backup --server
Hardlinks disabled by default on Windows
Unable to import module xattr.
Extended attributes not supported on filesystem at C:/Users/vdrmrt/Desktop/data
Unable to import module posix1e from pylibacl package.
POSIX ACLs not supported on filesystem at C:/Users/vdrmrt/Desktop/data
escape_dos_devices not required by filesystem at C:/Users/vdrmrt/Desktop/data
Symbolic links excluded by default on Windows
Starting increment operation C:/Users/vdrmrt/Desktop/data to backup
正确的输出:
Using rdiff-backup version 1.2.8
Executing ./bin/openssh/bin/ssh -q -C -p 5555 -i ./keys/rdiffbackup -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null vdrmrt@hostname rdiff-backup --server
Hardlinks disabled by default on Windows
Unable to import module xattr.
Extended attributes not supported on filesystem at C:/Users/vdrmrt/Desktop/data
Unable to import module posix1e from pylibacl package.
POSIX ACLs not supported on filesystem at C:/Users/vdrmrt/Desktop/data
escape_dos_devices not required by filesystem at C:/Users/vdrmrt/Desktop/data
-----------------------------------------------------------------
Detected abilities for source (read only) file system:
Access control lists Off
Extended attributes Off
Windows access control lists On
Case sensitivity Off
Escape DOS devices Off
Escape trailing spaces Off
Mac OS X style resource forks Off
Mac OS X Finder information Off
-----------------------------------------------------------------
Unable to import win32security module. Windows ACLs
not supported by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0
escape_dos_devices not required by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0
-----------------------------------------------------------------
Detected abilities for destination (read/write) file system:
Ownership changing Off
Hard linking On
fsync() directories On
Directory inc permissions On
High-bit permissions On
Symlink permissions Off
Extended filenames On
Windows reserved filenames Off
Access control lists On
Extended attributes On
Windows access control lists Off
Case sensitivity On
Escape DOS devices Off
Escape trailing spaces Off
Mac OS X style resource forks Off
Mac OS X Finder information Off
-----------------------------------------------------------------
Backup: must_escape_dos_devices = 0
Symbolic links excluded by default on Windows
Starting increment operation C:/Users/vdrmrt/Desktop/data to backup
最佳答案
我终于解决了这个问题。
Rdiff-backup 在通过管道传输到其他程序时缓冲 stdout 和 stderr。解决方案是使用额外的 py2exe 选项重建 rdiff-backup:'unbuffered': True
我还必须添加一个额外的选项以使其在使用 Windows 7 构建时能够正常工作。
Py2exe - win32api.pyc ImportError DLL load failed
这是来自 rdiff-backup 构建的最终 setup.py 的片段。
if '--single-file' in sys.argv[1:]:
sys.argv.remove('--single-file')
extra_options.update({
'options': {'py2exe': {'bundle_files': 1,
'unbuffered': True,
'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]}},
'zipfile': None
})
关于Python subprocess.popen 和 rdiff-backup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298044/
BACKUP 无法完成命令 BACKUP DATABASE ... WITH DIFFERENTIAL。检查备份应用程序日志以获取详细消息。 我在 SQL Server 日志文件查看器中看到了这条消息
备份 VMWare 服务器 (1.0.x) 的最佳方法是什么? 有问题的虚拟机是我们的开发环境,与主网络隔离运行(因此您不能只是将数据从虚拟服务器复制到真实服务器)。 镜像文件通常在使用中,并且在服务
正如问题所述,我有一个实际 iPhone 的备份。现在我想要模拟器中内容的“副本”。原因是我的真实 iPhone 包含第三方应用程序数据,我也希望在模拟器中拥有这些数据。 这可能吗? 谢谢,诺伯特 最
我在 Debian 系统上工作,其中运行着 PostgreSQL 服务器。我修改了一个备份脚本并安装了一个 cron 作业来对我们的数据库进行每小时备份,并将其存储在一个文件夹中。与此同时,还会执行一
我正在尝试从备份 (.bak) 文件恢复数据库,该文件[保存]在 ZIP 文件内,但到目前为止尚未成功。不过,我可以在从 ZIP 文件中解压后恢复它。 这个MS page表示 SQL Server 2
我想在同一台机器内创建我的 sql server 2008 r2 数据库(名为 ERP)的副本。所以我做了以下步骤:- 我右键单击原始数据库 ERP,然后选择 Tasks>>Backup。 然后我创建
我尝试使用我的应用程序,其中包含 Android Backup Service 的用法在 Android Emulator 上使用我自己的 BackupAgent。但是备份不起作用,尽管在 And
当我尝试使用 pyodbc 和 freetds 从 Linux 主机备份 MSSQL 数据库时,我目前遇到了一些问题。版本如下: Python 2.7.6、pyodbc 3.0.7、freetds 0
我正在使用 rsync 运行备份,在此期间创建了一个日志文件。但是,我不知道缩写是什么意思。这是日志文件的示例: 2016/11/15 15:17:53 [4906] building file li
我有一个问题。 Duplicity 非常适合备份,我非常喜欢能够进行增量 diff tars,但是......当恢复 duplicity 时似乎不适用相同的概念。 基本上我只需要恢复更改的文件(显然是
问题: 客户 X 正在(考虑)将他以前“仅限 Windows”的共享软件应用程序之一移植到 Mac OS X。他关心的问题之一是如何强制执行 30 天试用期并使其不受“系统回滚”软件的影响比如时光机。
我一直试图让口是心非的备份到谷歌驱动器。但看起来它仍在使用旧的客户端 API。 我发现一些线程说应该支持新的 API,但没有太多关于如何让它工作的细节。 我编译和使用了duplicity 7.0.3,
我们正在寻求为ouchdb数据库创建常规备份,以备不时之需。获取这些内容的最不侵入方式是什么?理想情况下,不中断或不显着降低现有数据库服务器的性能? 最佳答案 您可以只复制CouchDB数据库文件。阅
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我知道--ignore-existing选项,想知道是否有些不同。 我的情况是:我有一个带有大量用户上传图片的Web服务器。现在大约2TB。通常,这些文件根本不会被修改。我使用rsync并将其备份到其
我对docker compose文件中的命名卷的功能有些困惑,特别是在备份/还原我的应用程序时。 我实际上正在测试此dockercompose文件: version: '2'
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我们使用的是 Teamcity 6.5.6 专业版,它为我提供了运行备份的选项,但我没有看到任何将其安排到特定时间的选项。 我不确定这个版本的 teamcity 是否支持计划备份。如果通过teamci
我正在阅读 Keycloak 的 export operation 的文档为了设置备份操作(例如通过 cron 作业),它所说的是在服务器启动期间发生导出: Export and import is
对于允许将单个 riak 存储桶备份[通过流式传输或快照]到文件的解决方案,您有何建议? 最佳答案 在 Riak 中仅备份单个存储桶将是一项困难的操作。 所有解决方案都归结为以下两个步骤: 列出存储桶
我是一名优秀的程序员,十分优秀!