我可以将长 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
我发现。
马上就有一个类似的问题
在 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
我发现。