Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Bash script overzetten naar python3  (gelezen 1237 keer)

Offline BaukeP

  • Lid
  • Steunpunt: Nee
Bash script overzetten naar python3
« Gepost op: 2017/06/24, 15:56:06 »
Hallo,
Ik heb de volgende regel in een bash-script. Deze geeft mij de nederlandse ondertitelingstracks in een mkv bestand.

subidn=$(ffmpeg -i "$ifile" 2>&1 | grep -e '(dut)' -e '(nld)' | awk -F: '{print $2}' | sed 's/(dut)/:/' | sed 's/(nld)/:/'| sed 's/ *$//')
Voor iets simpeler zaken heb ik het volgende gebruikt:
opdr2 = "convert '"+tmppad+"'/*.jpg "+ofile+"; rm -rf '"+tmppad+"' && rm "+ifile
    try:
        subprocess.call(opdr2, shell=True, executable='/bin/bash')
        aantalverwerkt += 1
    except:
        continue
en dat werkt al is het niet echt pythonic.

Hoe wordt het eerste stukje code in python3? Het liefst op z'n pythons ... ik moet tenslotte ook iets leren  :D

Alvast mijn hartelijke dank,

Bauke

Offline erik1984

  • Lid
    • erik1984
  • Steunpunt: Nee
Re: Bash script overzetten naar python3
« Reactie #1 Gepost op: 2017/06/26, 21:54:25 »
Hoe het precies python3 wordt weet ik niet maar je kunt patroonvervanging die je met sed doet ook doen met replace() in python. Of anders met regex (daarvoor moet je de module re importeren) als je reguliere expressies wil vervangen. Meer info: https://docs.python.org/3.4/howto/regex.html#search-and-replace

Bij replace() kun je de opdrachten ook 'ketenen' dus bijvoorbeeld:
o = "abc"
n = o.replace("a",  "x").replace("b",  "y").replace("c",  "z")
print(n) # Zou "xyz" moeten tonen.
Dit zou als vervanging voor sed kunnen dienen in simpele gevallen.

Overigens is er natuurlijk niet veel mis met een bashscript als dit goed werkt toch? Als je allerlei externe applicaties zoals ffmpeg wil aanroepen kan ik met voorstellen dat bash fijner werkt.

Offline MKe

  • Lid
  • Steunpunt: Nee
Re: Bash script overzetten naar python3
« Reactie #2 Gepost op: 2017/06/27, 10:42:59 »
regex substitute is de python versie van sed.

import re
line = re.sub(r"\s*$", "", mijn_tekst_variable) # = sed 's/ *$//'

Offline BaukeP

  • Lid
  • Steunpunt: Nee
Re: Bash script overzetten naar python3
« Reactie #3 Gepost op: 2017/07/06, 18:12:05 »
Heren bedankt en excuses voor de late reactie. Maar wat ik bedoelde is: Hoe krijg ik het bash commando in subprocess.call(ffmpeg etc) en welke opties moeten er dan bij.

Dus:
 subprocess.call(ffmpeg -i "$ifile" 2>&1 | grep -e '(dut)' -e '(nld)' | awk -F: '{print $2}' | sed 's/(dut)/:/' | sed 's/(nld)/:/'| sed 's/ *$//', shell=True, executable='/bin/bash')

Bauke

Offline MKe

  • Lid
  • Steunpunt: Nee
Re: Bash script overzetten naar python3
« Reactie #4 Gepost op: 2017/07/06, 19:19:45 »
Pipes in subprocess werken alleen als de shell=True optie wordt gegeven. Dit is echter niet aan te raden.

Het kan ook op een andere manier met popen. Hier een demonstratie die ik van het internet geknipt en geplakt heb een die de Python processen uit PS haalt via een pipe naar grep:
import subprocess
import shlex
proc1 = subprocess.Popen(shlex.split('ps cat'),stdout=subprocess.PIPE)
proc2 = subprocess.Popen(shlex.split('grep python'),stdin=proc1.stdout,
                         stdout=subprocess.PIPE,stderr=subprocess.PIPE)

proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits.
out,err=proc2.communicate()
print('out: {0}'.format(out))
print('err: {0}'.format(err))
« Laatst bewerkt op: 2017/07/06, 22:46:57 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline BaukeP

  • Lid
  • Steunpunt: Nee
Re: Bash script overzetten naar python3
« Reactie #5 Gepost op: 2017/07/06, 20:34:40 »
MKe, bedankt. Ik ga me er wat meer in verdiepen.

Bauke