2017-07-14 1 views
0

Dès le départ, il ya une question similaire here mais il ne répond pas tout à fait ma question. J'ai laissé un commentaire juste au cas où.Puis-je passer une commande bash longue à asyncio.subprocess.create_subprocess_exec()?

En asyncio il y a une asyncio.subprocess.create_subprocess_exec coroutine mimant la commande subprocess.Popen plus commune avec shell=False pour protéger contre l'injection de la coquille. Popen accepte une liste de chaînes, mais create_subprocess_exec accepte uniquement les chaînes, comme

asyncio.subprocess.create_subprocess_exec('ls', '-lah', 'myfile', stdout=..., stderr=..., stdin=...) 

J'ai une commande bash comme une grande chaîne, par exemple s = 'ls -lah myfile'. Je veux passer la commande à create_subprocess_execmais une liste comme s.split() ne fonctionne pas! Comment faire?

Répondre

0

Il semble que asyncio.subprocess.create_subprocess_exec acceptera une liste vedette comme une série d'arguments, de sorte que la solution doit être

cmd = ['ls', '-lah', 'myfile'] 
asyncio.subprocess.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, stdin=asyncio.subprocess.PIPE) 

Un mot d'avertissement, les commandes de formatage bash de cette façon peut être difficile, surtout avec rsync I Je trouve.