Maison  >  Questions et réponses  >  le corps du texte

linux - Comment écrire la commande shell suivante en python?

Le script original a été maintenu par un senior. C'était un script shell et c'était trop difficile à comprendre. Le patron m'a demandé de le réécrire en python. La fonction est la suivante, qui consiste à obtenir le champ d'horodatage dans le svn. log

]
J'ai suivi les instructions de Python. La façon de l'écrire est de regrouper les commandes ensemble et d'appeler popen pour les exécuter.

Mais une erreur a été signalée lors de l'exécution, comme indiqué ci-dessous :

Ensuite j'ai mesuré la partie avant de cmd, qui est

Le résultat est :

On peut voir que le résultat est correct, donc le problème de jugement se produit dans la partie sed. S'il vous plaît, aidez-moi avec vos seniors.

漂亮男人漂亮男人2669 Il y a quelques jours1093

répondre à tous(3)je répondrai

  • 我想大声告诉你

    我想大声告诉你2017-06-28 09:25:05

    Est-ce que cela peut fonctionner si vous copiez la commande directement sur la ligne de commande ? Si cela fonctionne, cela signifie que vous avez fait une erreur dans l'organisation de la chaîne. Par exemple, vous avez manqué les guillemets doubles. Par exemple, "%F" et '"%F"' en python sont différents, et '2' et '\. 2' sont différents

    répondre
    0
  • 怪我咯

    怪我咯2017-06-28 09:25:05

    Quand j'ai commencé à travailler, j'étais trop collé aux idées des autres, j'ai pensé à utiliser Python pour implémenter des fonctions autant que possible. Utilisez simplement la fonction de remplacement de Python pour résoudre le problème

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-28 09:25:05

    Pas besoinsed/grep...

    # coding: utf8
    import re 
    from time import strftime, strptime
    from subprocess import Popen, PIPE
    
    cmd = 'svn log' # 不需要sed
    result = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
    stdout, stderr = result.communicate()
    
    for _ in re.findall(r'(?<=date>)([^<.]+)\.', stdout):
        print(strftime("%F %T", strptime(_, "%Y-%m-%dT%H:%M:%S")))
    

    répondre
    0
  • Annulerrépondre