Nieuws:

Ubuntu-NL weer online!

Na een periode van technische problemen en een overbelaste server zijn we eindelijk weer bereikbaar.
Samen met Hobbynet, onze sponsor en hostingpartner, hebben we een oplossing gevonden zodat alles weer soepel draait.

Bedankt voor jullie geduld en begrip. We hopen nu weer verder te gaan waar we gebleven waren.

Het team van Ubuntu-NL

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

Auteur Topic: Python subprocess probleem  (gelezen 476 keer)

Offline BaukeP

  • Lid
Python subprocess probleem
« Gepost op: 2014/07/04, 00:55:32 »
Hallo,
Ik probeer het volgende commando, wat in de terminal prima werkt, in python te gebruiken.

awk 'BEGIN {FS= ";"} $1 > max {max=$1}; END{ print max} ' /mnt/Data/Frequent/BankImport/ABN_tm_01-07-2014.csv

Ik krijg in de terminal mooi de jongste datum en dat is wat ik zoek.

Als ik in python het volgende doe, werkt het niet

maxdatum = subprocess.call(awk 'BEGIN {FS= ";"} $1 > max {max=$1}; END{ print max} ' +argv[1], shell=True)
waar argv[1] de bestandsnaam is.

Meldingen bv:
BEGIN-blokken horen een actiedeel te hebben
onverwacht regeleinde of einde van string

En nu weet ik het niet meer. Wie kan mij helpen?

Alvast mijn hartelijke dank

Bauke

Re: Python subprocess probleem
« Reactie #1 Gepost op: 2014/07/04, 02:16:32 »
Ik kan het niet testen, maar probeer eens iets als het volgende:

maxdatum = subprocess.call(["awk", """'BEGIN {FS= ";"} $1 > max {max=$1}; END{ print max} '%s""" % argv[1]], shell=True)

Lees zeker ook de documentatie eens door: https://docs.python.org/2/library/subprocess.html#module-subprocess
Vooral in verband met shell=True:
Warning

Executing shell commands that incorporate unsanitized input from an untrusted source makes a program vulnerable to shell injection, a serious security flaw which can result in arbitrary command execution. For this reason, the use of shell=True is strongly discouraged in cases where the command string is constructed from external input:

Offline BaukeP

  • Lid
Re: Python subprocess probleem
« Reactie #2 Gepost op: 2014/07/04, 13:16:36 »
Nunslaughter, bedankt
Helaas ....... De foutmeldingen zijn weg, maar alles wat ik krijg = 0 in maxdatum.

Ik ga de links die je gaf het weekend even doorspitten.

Het invoerbestand ziet er trouwens als volgt uit: (voorbeeld)
"20140624","anderezooi","12.25"
"20140630","anderezooi","12.21"

Bauke

Re: Python subprocess probleem
« Reactie #3 Gepost op: 2014/07/04, 20:39:24 »
Mijn ervaring met de Subprocess module zijn gelimiteerd, dus echt verder kan ik u niet helpen. In plaats van subprocess.call lijkt mij subprocess.check_output beter.

Het kan natuurlijk ook gewoon in Python in plaats van awk aan te roepen:

import csv
with open(argv[1], "r") as infile:
    reader = csv.reader(infile, delimiter=",", quotechar="\"")
    print max([line[0] for line in reader])

Offline BaukeP

  • Lid
Re: Python subprocess probleem
« Reactie #4 Gepost op: 2014/07/05, 17:08:38 »
Nunslaughter,

dat werkt inderdaad ook prima!

Bedankt,

Bauke