2017-07-14 86 views
0

馬上蝙蝠,有類似的問題here但它不完全回答我的問題。儘管如此,我留下了評論。我可以將一個長bash命令傳遞給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()這樣的列表不起作用!怎麼辦?

回答

0

似乎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我發現。

相關問題