J'essaie d'utiliser la commande grep dans un script python en utilisant le module de sous-processus.
Voici ce que j'ai:
userid = 'foo12'
p = subprocess.Popen(['grep', "%s *.log"%userid], stdout=subprocess.PIPE)
Et ça ne renvoie rien. Je ne suis pas tout à fait sûr de ce que je fais mal, alors quelqu'un peut-il expliquer. La méthode actuelle que j'utilise qui fonctionne est en ajoutant le shell = true qui lui fait sortir la sortie correcte mais comme les pages d'aide l'ont souligné, ce n'est pas sûr. J'ai besoin d'aide pour essayer de faire en sorte que mon script ne soit pas dangereux.
2 réponses
Je suppose que vous voulez grep pour 'foo12' dans tous les fichiers qui se terminent par '.log', pour que cela fonctionne avec subprocess
, vous devrez changer votre code comme suit:
userid = 'foo12'
p = subprocess.Popen('grep %s *.log' % userid, stdout=subprocess.PIPE, shell=True)
shell=True
est nécessaire pour l'extension générique, et lorsque cette option est définie, vous devez fournir une commande de chaîne au lieu d'une liste.
Assurez-vous également que lorsque vous fournissez une liste d'arguments que chaque argument est une entrée distincte dans la liste, votre code initial aurait été équivalent à ce qui suit:
grep 'foo12 *.log'
Voici deux morceaux de code testés à partir desquels vous pouvez modéliser:
>>> print subprocess.check_output(['grep', 'python', 'api_talk.txt'])
Discuss python API patterns
Limitations of python
Introspection in python
>>> print subprocess.check_output('grep python *.txt', shell=True)
Utilisez ce dernier si vous voulez que le shell fasse une expansion générique pour vous. Lorsque shell est True , assurez-vous de placer la commande entière dans une seule chaîne plutôt que dans une liste de champs séparés.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.