Nieuws:

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

Auteur Topic: Python subprocess probleem  (gelezen 169 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