Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

Python eller Bash?

#!/bin/bash

for f in *.wav; do
    lame -b 320 -h "$f" "${f%.wav}.mp3"
done

eller

#!/usr/bin/env python
import os, glob
for f in glob.glob("*.wav"):
    os.system("lame -b 320 -h " + f + " " + f.replace("wav", "mp3"))

Vilket alternativ föredrar du? Kanske finns det en betydligt snyggare variant?

Själv föredrar jag den senare. Den är varken kortare eller elegantare men däremot in mina ögon lättare att skriva, utöka och förstå (även om bash-varianten i just det här fallet också är ganska lättförstålig vad gäller utbytet wav->mp3)

 

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

ein.anderssons bild

I detta fallet lägger jag min slant på bash.

--
(Alla stavfel nu ser mig skriva är antagligen oavsiktliga eller avsiktliga, oavsätt så är dom där)

Denna text får användas enligt CCommons BY-ND 2.5 med undantag från att den inte får kopieras, sändas eller distribueras utan att informera mig

jeffs bild

+1.

Men precis som du säger Kristian, skulle jag utöka skriptet/funktionen ytterligare så skulle jag nog också skriva den i något annat än bash, som exempelvis Perl eller Python.

______________________________________

------

fredentofts bild

Helt klart så, det är ju bara en enkel loop och systemanrop, varför lägga på extra beroenden som inte i sig tillför något. Det kan ju hända att man vill köra det någonstans man inte har python installerat.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Argumentera aldrig med idioter. De drar bara ner dig till sin nivå och vinner på erfarenhet!

-
För övrigt anser jag att trådindenteringen måste lagas
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Kristians bild

Det är ett bra argument. Men sen kommer morgondagen då man vill lägga in inställningar, felhantering osv. När python-koden i dagens läge inte är besvärligare att skriva men skalar betydligt bättre än bash när komplexiteten ökar så väger det också starkt in mina ögon.

Ett annat motargument är att python-varianten fungerar under Windows vilket inte bash gör (såvida man inte installerar cygwin, vilken nog får ses som ett mer exotiskt beroende än cpython/ironpython/jython).

---------------------------------------

Open Source - because writing software doesn't make you a "traitor"

---------------------------------------

 

fredentofts bild

Sant.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Argumentera aldrig med idioter. De drar bara ner dig till sin nivå och vinner på erfarenhet!

-
För övrigt anser jag att trådindenteringen måste lagas
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

pluckers bild

Om vi bortser från att bash-lösningen är felaktig ("*.wav" borde enbart vara *.wav Smile, så hade jag nog föredragit bash-varianten. I python, så hade jag mer eller mindre löst det på samma vis som i bash.

#!/usr/bin/python
import os, glob
for f in glob.glob("*.wav"):
    os.system("lame -b 320 -h " + f + " " + f.replace("wav", "mp3"))

Möjligtvis även med "&" på slutet av system-kommandot...

/Micke

Kristians bild

Ah, tänkte inte på globs existens i python. Det gör saker lite elegantare. Läste att 2014 har våra datorer uppåt tusen cores - då kommer det kännas helt rätt att dra igång alla lame-processerna parallellt men tror du verkligen att det går fortare i dagens läge? En handfull konvertingar kan säkert köras snabbare parallellt men kanske inte ett längre album?

Sen borde man väl egentligen använda

#!/usr/bin/env python

---------------------------------------

Open Source - because writing software doesn't make you a "traitor"

---------------------------------------

 

clfns bild

Kan man inte skriva bash att arbeta parallellt på flera kärnor?

pluckers bild

Man kan ju alltid lägga till lite extra logik för att begränsa det till antalet cpu-kärnor (gäller även bash-varianten), men då blir det genast en mer komplex lösning som man bör använda relativt ofta för att det ska löna sig. Om detta sedan blir snabbare eller ej är väl som med all optimering något man får testa sig fram till...

/Micke

lundatoks bild

För rena terminaloperationer skulle jag nog köra BASH men när det blir som du säger Kristian lite utökad funktionalitet så tycker jag läsbarheten i Pythons kod är härlig.

Jag har en viss förkärlek till bash så det hade jag valt.

Men som alltid är det uppgiften som bestämmer val av språk.

rickards bild

Lustigt att du skriver det där just nu. Jag satt på jobbet för bara en halvtimme sedan och skulle sätta igång och skriva ett skript som ska kunna klona bootbara usb-stickor med flera partitioner.

Då frös jag några minuter och funderade på om jag skulle gå den snabba och lättutvecklade bash-vägen med en massa oneliners, eller den till en början något krångligare python-vägen med vinsten att det är just lättare att debugga samt bygga ut.

Det blev det senare.

Kristians bild

Haha, där ser man Smile Jag försöker inte predika något, jag försöker bara få igång en diskussion och än så länge har vi fått många bra synpunkter i den här tråden.

---------------------------------------

Open Source - because writing software doesn't make you a "traitor"

---------------------------------------

 

rickards bild

Jag tycker förresten dessutom att det är roligare att skriva python än bash. Det är en anledning som man verkligen inte ska underskatta.

Kristians bild

Är förresten bash-lösningen även giltig posixshell? Enligt sista inlägget på http://stackoverflow.com/questions/1224766/bash-rename-files så verkar det inte så

---------------------------------------

Open Source - because writing software doesn't make you a "traitor"

---------------------------------------

 

Denna typen av frågor brukar jag ta i irc #bash.

Dom kommer alltid fram till riktigt bra lösningar och det minst resurskrävande.

Det är en riktigt bra kanal och oftast bästa stället att få ett bra svar eller alternativ lösning.

pluckers bild

${name%pattern} stöds även i posix-shell. Däremot så skulle nog gamla hederliga Bourne shell få problem om man inte använde en 'expr-substränghantering' enligt det inlägg du refererar till...

/Micke

tapetersens bild

Aningens sent men kunde inte låta bli att påpeka att python versionen inte tar hänsyn till att wav mycket väl kan vara en del av filnamnet medan bashscriptet åtminstone kollar efter punkten också. Lite oförsiktig substitution Kristian...

Du ska inte försöka i lisp också?

/Tobias

tomasuus bild

Jag gillar att skriva en prototyp i bash. Nu har jag en del script som jag ska försöka skriva om i andra språk för att lära mig mer!