2017-05-22 2 views
0

Ceci est le formatage effectué pour cette commande ubuntu egrep -v "usernameshere" en python comme ci-dessouscommande python mise en forme de commande Ubuntu dans une liste

userfilter = ["egrep", "-v", "\"{filter}\"".format(filter=filteruser)] 

Pourquoi faire: Je passe ceci à un sous-processus et exécutant la commande à partir de python.

Maintenant, je veux accomplir la même chose pour cette commande comment le faire.

awk '{gsub("admin","");print}' 

J'ai essayé le dessous d'un mais ne fonctionne pas, certaines erreurs de syntaxe

Essayez 1

userfilter=["awk","\'{gsub({filter},\"\");print}\'".format(filter=filteruser)] 

Essayez 2

userfilter=["awk","\'{gsub({filter}.format(filter=filteruser),\"\");print}\'"] 

erreurs:

1 Erreur TRY:

userfilter=["awk","\'{gsub({filter},\"\");print}\'".format(f‌​ilter=filteruser)] KeyError: 'gsub({filter},"");print' 

2 Erreur TRY:

awk: 1: unexpected character '.' 
awk: line 1: extra ')' 
+0

Quelle est l'erreur de syntaxe spécifique que vous avez rencontrée? – Eduard

+0

'userfilter = [" awk "," \ '{gsub ({filtre}, \ "\"); print} \' ". Format (filtre = filteruser)] KeyError: 'gsub ({filtre}," ") 'print'' dans le premier cas –

+0

Je suppose que vous avez des problèmes avec l'utilisation de plusieurs accolades. Essayez ceci à la place 'userfilter = [" awk "," \ '{gsub ("+ filteruser +", \ "\"); print} \' "]' – Eduard

Répondre

0

Donc, fondamentalement, l'utilisation de multiples accolades vous donne la syntaxe question. Utilisez simplement les doubles crochets pour imprimer les accolades dans votre chaîne.

userfilter=["awk","\'{{gsub({filter},\"\");print}}\'".format(filter=filteruser)] 

Format strings contain “replacement fields” surrounded by curly braces {}. Anything that is not contained in braces is considered literal text, which is copied unchanged to the output. If you need to include a brace character in the literal text, it can be escaped by doubling: {{ and }}.

Related question

Je ne suis pas sûr de savoir comment votre rencontre la deuxième erreur, parce que quand je copie coller à mon terminal, je reçois pas d'erreur, mais simplement une chaîne littérale.

>>> userfilter=["awk","\'{gsub({filter}.format(filter=filteruser),\"\");print}\'"] 
>>> userfilter 
['awk', '\'{gsub({filter}.format(filter=filteruser),"");print}\''] 
+0

L'erreur vient quand j'utilise cela dans le sous-processus et l'exécuter, Son évidemment ne va pas s'exécuter si nous vérifions simplement la variable –

+0

Comme l'indique le document, utilisez simplement des doubles accolades si vous voulez inclure un caractère accolade dans le texte littéral. . 'userfilter = [" awk "," \ '{{gsub ({filtre} .format (filtre = filteruser), \ "\"); print}} \' "]' – Eduard

+0

qui ne fonctionnait pas 'awk: 1 : caractère inattendu '' ' awk: ligne 1: erreur de syntaxe à ou près | ' –