J'ai une liste d'arguments, par exemple mauvais fort>: p> ["Bonjour", "Bobbity Bob", "Bye"] Code>. Comment puis-je formater ceux-ci afin qu'ils soient passés de manière appropriée à une coquille?
4 Réponses :
Qu'est-ce qui ne va pas avec l'approche de la vieille école: Peu importe si les arguments à un mot sont également cités. P> P>
Travaux pour ces arguments, mais peut causer des problèmes (y compris les problèmes de sécurité) si les arguments peuvent éventuellement contenir des guillemets simples.
Le moyen plus facile de résoudre votre problème est d'ajouter \ "... \" chaque fois que votre texte a au moins deux mots.
Donc, pour le faire:
# Update the list for str in args: if len(str.split(" ")) > 2: # Update the element within the list by # Adding at the beginning and at the end \" ... # Print args " ".join(args)
Cases où cela ne fonctionne pas: list_to_cmdline (["Curl ',' site / page. html? x = 1 & y = 2 '] ) list_to_cmdline (["Citations",' "\ '']) list_to_cmdline ([" ECHO ', "STAR",' * '])
Si vous envoyez des valeurs à un script shell, http://docs.python.org/library/ subprocess.html? Highlight = popen # subprocess.popen p>
Sinon, je crois que vous êtes en train de manipuler. subprocess.popen code> gère ceci pour vous: p>
shlex.split code> fait l'inverse de ce que vous voulez, mais il ne semble pas y avoir de marche arrière. P>
Vous pouvez utiliser le sans-papiers mais longue stable (au moins depuis oct. 2004 ) sous-processus.list2cmdline code>:
Ah parfait .. exactement ce que je voulais. Je me demande pourquoi ce n'est pas documenté
Avez-vous besoin de gérer les cas lorsque certains arguments peuvent contenir des citations
" code> s ou backslashes?
\ code>'s ?.
@TokenMacGuyy: Ouais .. Je veux fondamentalement exactement comment il serait passé par
popen code>, mais comme ligne de commande