任何人都可以将此 rsync 命令解析为列表以供 asyncio.subprocess 使用吗?
Can anyone parse this rsync command into a list for use with asyncio.subprocess?
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"]
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"]