python - 任何人都可以将此 rsync 命令解析为与 asyncio.subprocess 一起使用的列表吗?

标签 python subprocess rsync python-asyncio

rsync 命令:

sshpass -p 'test' rsync -v -e 'ssh -p 2200' --stats --timeout=60 anonymous@localhost:/DSK1/SSN/LOG[0-9]_F/17191/l134191l.17.bnx L134201707101100f.amalthea

此命令与asyncio.subprocess.create_subprocess_shell配合使用效果良好,但我想将其作为列表传递给create_subprocess_exec

asyncio.subprocess.create_subprocess_exec(*cmdList, stdin=..., ...)

我尝试简单地用cmdString.split()拆分它来获取

['sshpass', '-p', "'test'", 'rsync', '-v', '-e', "'ssh", '-p', "2200'", '--stats', '--timeout=60', 'anonymous@localhost:/DSK1/SSN/LOG[0-9]_F/17191/l134191l.17.bnx', 'L134201707101100f.amalthea']

但是rsync 因引号而出错。具体来说:

Unexpected remote arg: anonymous@localhost:/DSK1/SSN/LOG[0-9]_F/17191/l134191i.17.bnx
rsync error: syntax or usage error (code 1) at main.c(1361) [sender=3.1.2] 

最佳答案

Shell 使用空格作为输入字段分隔符。为了保护任何空格,请使用引号,或者转义空格。

运行asyncio.subprocess.create_subprocess_exec时,字段已被分隔,并且空格被视为输入字段分隔符。

ssh -p 2200 应放置在一个字段中。 rsync 将按原样查看它。在 shell 中,它被引用以保护空白。

["sshpass", "-p", "test", "rsync", "-v", "-e", "ssh -p 2200", "--stats",
"--timeout=60", "anonymous@localhost:/DSK1/SSN/LOG[0-9]_F/17191/l134191l.17.‌​bnx",
"L134201707101100f.amalthea"]

关于python - 任何人都可以将此 rsync 命令解析为与 asyncio.subprocess 一起使用的列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45112505/

相关文章:

google-cloud-storage - 从 Google Cloud Storage 恢复以前版本的文件

python - 如何在 Python 中绘制时间线分支图

c++ - 作为 QT 小部件的子进程

windows - Windows 上的 Rsync : wrong permissions for created directories

python - 使用 python 运行 bash 脚本 - TypeError : bufsize must be an integer

python - 子进程.Popen : how to pass a list as argument

windows - Gitbash 中的 rsync (cwrsync) - 源和目标不能都是远程的。 [Windows 7的]

python - 将字典值映射到列表

python - 在没有 copystat 的情况下使用 shutil.copytree

python - 重命名为数字的 Pandas DataFrame 列