我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?

Can I pass a long bash command to asyncio.subprocess.create_subprocess_exec()?

马上就有一个类似的问题 但它并没有完全回答 我的 问题。不过,为了以防万一,我在那里发表了评论。

asyncio 中有一个 asyncio.subprocess.create_subprocess_exec 协程模仿更常见的 subprocess.Popen 命令和 shell=False 以防止 shell 注入。 Popen 接受 列表 的字符串,但 create_subprocess_exec 只接受字符串,例如

asyncio.subprocess.create_subprocess_exec('ls', '-lah', 'myfile', stdout=..., stderr=..., stdin=...)

我有一个 bash 命令作为一个大字符串,例如s = 'ls -lah myfile'。我想将命令传递给 create_subprocess_exec 但是像 s.split() 这样的列表不起作用! 怎么办?

似乎asyncio.subprocess.create_subprocess_exec会接受一个星号列表作为一系列参数,所以解决方案应该是

cmd = ['ls', '-lah', 'myfile']
asyncio.subprocess.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, stdin=asyncio.subprocess.PIPE)

请注意,以这种方式格式化 bash 命令可能很困难,尤其是 rsync 我发现。