马上,有一个类似的问题here但它并没有完全回答我的问题。不过,为了以防万一,我在那里发表了评论。
在 asyncio
中有一个 asyncio.subprocess.create_subprocess_exec
协程模仿更常见的 subprocess.Popen
命令与 shell=False
以防止 shell 注入(inject)。 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
我发现。
关于python-3.x - 我可以将长 bash 命令传递给 asyncio.subprocess.create_subprocess_exec() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111143/