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: Python subprocess probleem  (gelezen 173 keer)

Offline BaukeP

  • Lid
  • Steunpunt: Nee
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

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
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
  • Steunpunt: Nee
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

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
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
  • Steunpunt: Nee
Re: Python subprocess probleem
« Reactie #4 Gepost op: 2014/07/05, 17:08:38 »
Nunslaughter,

dat werkt inderdaad ook prima!

Bedankt,

Bauke