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

时间:2017-07-14 20:28:41

标签: python-3.x subprocess python-asyncio

马上就有一个类似的问题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()这样的列表不起作用!怎么办?

1 个答案:

答案 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>