首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pexpect调用rsync : glob字符串不工作

用pexpect调用rsync : glob字符串不工作
EN

Stack Overflow用户
提问于 2016-10-19 02:14:19
回答 1查看 915关注 0票数 0

我正在尝试用rsync对一些文件进行pexpect处理。我提供的用来标识所有源文件的glob字符串参数似乎不起作用。

它的主旨是这样的..。

代码语言:javascript
复制
import pexpect
import sys

glob_str = (
    "[0-9]" * 4 + "-" +
    "[0-9]" * 2 + "-" +
    "[0-9]" * 2 + "-" +
    "[A-B]" + "*"
)

SRC = "../data/{}".format(glob_str)
DES = "user@host:" + "/path/to/dest/"

args = [
    "-avP",
    SRC,
    DES,
]

print "rsync" + " ".join(args)

# Execute the transfer
child = pexpect.spawn("rsync", args)
child.logfile_read = sys.stdout  # log what the child sends back
child.expect("Password:")
child.sendline("#######")
child.expect(pexpect.EOF)

这次失败..。

代码语言:javascript
复制
building file list ...
rsync: link_stat "/Users/U6020643/git/ue-sme-query-logs/code/../data/[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]\-[A-B]*" failed: No such file or directory (2)
0 files to consider
...

在shell中运行的相同命令运行得很好。

代码语言:javascript
复制
rsync -avP ../data/[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]\-[A-B].csv username@host:/path/to/dest/

pexpect文档提到了这一点

请记住,Pexpect不会解释shell元字符,例如重定向、管道或通配符(>、欧元或*)。这是一个常见的错误。如果您想运行一个命令并通过另一个命令进行管道传输,那么您还必须启动一个shell。

但这样做..。

代码语言:javascript
复制
...
args = [
    "rsync",
    "-avP",
    SRC,
    DES,
]
...
child = pexpect.spawn("/bin/bash", args)  # have to use a shell for glob expansion to work
...

遇到权限问题。

代码语言:javascript
复制
/usr/bin/rsync: /usr/bin/rsync: cannot execute binary file
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 02:43:58

要使用rsync运行bash,必须使用bash -c "cmd..."

代码语言:javascript
复制
args = ["-c", "rsync -avP {} {}".format(SRC, DES)]
child = pexpect.spawn('/bin/bash', args=args)

我想你也可以试试rsync --include=PATTERN

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40120979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档