马上就有一个类似的问题here,但它并没有完全回答我的问题。我在那里留下了一个评论,以防万一。
在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()
这样的列表不起作用!怎么办?
答案 0 :(得分:1)
似乎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命令可能很困难,尤其是{I}我找到了。{/ p>