2013-05-16 1 views

Répondre

3

Non, car le shell supprime ces espaces, pas optparse. Python reçoit une liste de paramètres de ligne de commande déjà analysés.

Utilisez les guillemets pour préserver les espaces:

./yourscript.py --option=" spaces in here " 

Pour démontrer, j'ai créé le script suivant:

#!/usr/bin/env python 
import sys 
print sys.argv 

pour vous montrer ce que optparse voit:

$ ./demo.py  foo bar baz 
['./demo.py', 'foo', 'bar', 'baz'] 

Notez comment la les espaces sont tous supprimés et trois valeurs sont passées au script. Mais avec la citation:

$ ./demo.py " foo bar" baz 
['./demo.py', ' foo bar', 'baz'] 

l'espace est préservé, et j'ai joint deux chaînes en une seule.

1

Votre question n'a pas beaucoup de données pour répondre efficacement, mais peut-être ce qui suit aide:

Si vous ne pouvez pas utiliser un regex qui commence par des espaces, essayez d'utiliser les caractères de remplacement qui représentent des espaces: \s .. Donc, \s{3}test correspondra "< 3 espaces> test".

S'il s'agit d'un script shell, n'oubliez pas de double-échapper car shell ignorera simplement le s dans \s. Donc la bonne version serait alors \\s{3}test

0

La ligne de commande sépare les arguments avant qu'ils n'atteignent votre programme Python. Selon votre shell, vous pouvez utiliser " ou ' pour encapsuler votre regex. Dans Bash, par exemple, les guillemets doubles activeront l'expansion du shell sur les caractères $ et `, ce qui peut provoquer des erreurs.

./match.py --pattern=" something (.*)"