Frage zu einem Projekt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 10. Juli 2006, 09:30

sys.argv ist einfach eine Liste. Das erste Element (sys.argv[0]) ist der Programmname, die restlichen sind die Parameter, die deinem Programm uebergeben wurden. Folgendes Programm gibt alle seine Parameter aus:

Code: Alles auswählen

import sys;
for arg in sys.argv:
    print arg
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 10. Juli 2006, 09:31

hubiat hat geschrieben:wie kann ich da in sys.argv nachsehen?!
Hi hubiat!

http://docs.python.org/lib/module-sys.html#l2h-329

Code: Alles auswählen

import sys
print sys.argv
print sys.argv[0]
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 10. Juli 2006, 09:33


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
hubiat
User
Beiträge: 20
Registriert: Donnerstag 22. Juni 2006, 09:23

Montag 10. Juli 2006, 12:26

ich glaub ich bin einfach zu blöd dafür! :--(

wie find ich mit diesen unterlagen genau heraus, wie ich ein file zum beispiel in der command line angebe?!?!

ich würde gern folgendes machen:

fileanalyse.py Test.csv >fileanalyse.txt

damit mein ich das python programm aufrufen, das test.csv file analysieren und das ergebnis nach fileanalyse.txt umleiten! :)

ich bin einfach zu blöd glaub ich, wie ich das am besten angehe!
*arrrgh* könnte mir hier jemand eventuell einen tipp geben, wie ich das am besten meistere?! damit mein ichaber uach das suchen danach im forum!
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Montag 10. Juli 2006, 12:36

Ich gebe zu ich habe mir den Teil davor nun nicht
durchgelesen aber ich würde dir schonmal empfehlen,
den Aufruf ohne ">" zu machen. Also eher so:

fileanalyse.py Test.csv fileanalyse.txt
In der Datei fileanalyse.py kannst du mit sys.argv[1] und sys.argv[2]
auf die 2 Parameter zugreifen, die du übergeben hast.

Code: Alles auswählen

import sys

print sys.argv[1]
print sys.argv[2]
*wie vorher auch schon erklärt*

Ergibt:

Code: Alles auswählen

C:\Dokumente und Einstellungen\lokal\Desktop>fileanalyse.py Test.csv fileanalyse.txt
Test.csv
fileanalyse.txt
hubiat
User
Beiträge: 20
Registriert: Donnerstag 22. Juni 2006, 09:23

Montag 10. Juli 2006, 12:48

pr0stAta hat geschrieben:Ich gebe zu ich habe mir den Teil davor nun nicht
durchgelesen aber ich würde dir schonmal empfehlen,
den Aufruf ohne ">" zu machen. Also eher so:

fileanalyse.py Test.csv fileanalyse.txt
In der Datei fileanalyse.py kannst du mit sys.argv[1] und sys.argv[2]
auf die 2 Parameter zugreifen, die du übergeben hast.

Code: Alles auswählen

import sys

print sys.argv[1]
print sys.argv[2]
*wie vorher auch schon erklärt*

Ergibt:

Code: Alles auswählen

C:\Dokumente und Einstellungen\lokal\Desktop>fileanalyse.py Test.csv fileanalyse.txt
Test.csv
fileanalyse.txt
okay...danke für den tipp!
hmm...und wie sieht da die handhabung dafür aus?!
wie greif ich auf die 2 parameter zu, welche ich übergeben hab?!
bei mir scheitert es glaub ich grundsätzlich an dem, dass ich die hilfe/erklärung zu dem sys.argv nicht verstanden hab! :-/
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 10. Juli 2006, 12:52

Oder wenn du es mit der Ausgabeumlenkung ">" machen willst: Dann nimmt dein Programm nur die Eingabedatei als Argument, und dein Programm gibt die Ausgaben, die du in einer Datei speichern moechtest, direkt auf dem Bildschirm aus.

Beispiel: Speichere folgendes Programm als argument.py:

Code: Alles auswählen

#!/usr/bin/env python

import sys;
print "Erstes Argument:", sys.argv[1];
Nun kann man in der Schell folgendes machen:
rbreu@zam285:python> ./argument.py eine_datai.txt
Erstes Argument: eine_datai.txt
rbreu@zam285:python>
(Ausgabe erscheint auf dem Bildschirm). Oder auch:
rbreu@zam285:python> ./argument.py eine_datai.txt > bla.txt
rbreu@zam285:python>
rbreu@zam285:python> more bla.txt
Erstes Argument: eine_datai.txt
(keine Ausgabe auf dem Bildschirm, die Shell lenkt die Ausgabe in die Datei bla.txt um)
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Montag 10. Juli 2006, 12:55

wie greif ich auf die 2 parameter zu, welche ich übergeben hab?!
He? :p Das hab ich doch gerade geschrieben.

Also nochmal:
Wie Rebecca schon sagte, sys.argv ist eine Liste. Die enthält als
Listeneinträge jene Werte, die du dem Programm übergibst.
Also wenn du schreibst:

Code: Alles auswählen

fileanalyse.py Test.csv fileanalyse.txt
Sieht sys.argv im pythoncode so aus:

Code: Alles auswählen

sys.argv = ["c:/ordner/fileanalyse.py", "Test.csv", "fileanalyse.txt"]
Nun kannst du dir aussuchen, ob du über die Liste iterierst(wie bei Rebeccas Beispiel ganz oben) oder die ELemente der Liste einzeln ansprichst (so wie ich es gemacht habe)

Hilft das weiter? Wenn nein, sag was genau du nicht versteht :>

Gruss prosta
hubiat
User
Beiträge: 20
Registriert: Donnerstag 22. Juni 2006, 09:23

Montag 10. Juli 2006, 13:21

ich steh heut einfach auf der leitung! :-/
also....
...wie es in meinem konkreten beispiel ist bring ich einfach keine lösung zusammen! keine ahnung warum!

hab das mit dem argument von rebecca versucht, aber leider erhalte ich dann folgende meldung:

./argument.py RTNames.csv
Traceback ( File "<interactive input>", line 1
./argument.py RTNames.csv
^
SyntaxError: invalid syntax

was versteh ich da falsch?!
schön langsam schäm ich mich für mein unlogisches denken heute! :-/
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 10. Juli 2006, 13:46

./argument.py RTNames.csv

Diese Zeile sollst du auch nicht in den Python-Interpreter eintippen, sondern in die Shell (command, Eingabeaufforderung oder wie auch immer es genannt wird, je nach dem ob's Linux oder Windows ist).
hubiat
User
Beiträge: 20
Registriert: Donnerstag 22. Juni 2006, 09:23

Montag 10. Juli 2006, 14:12

Rebecca hat geschrieben:
./argument.py RTNames.csv

Diese Zeile sollst du auch nicht in den Python-Interpreter eintippen, sondern in die Shell (command, Eingabeaufforderung oder wie auch immer es genannt wird, je nach dem ob's Linux oder Windows ist).
okay...das hab ich nun mal verstanden!

jetzt hab ich die fix eingetragene RTNames.csv im Sourcecode, ersetzt durch sys.argv[1], ist das korrekt?!
muss ich da was besonderes beachten?!
weil ich erhalte nun folgende meldung!

D:\Bildung\python\jhtest>bbb.py RTNames.csv
Traceback (most recent call last):
File "D:\Bildung\python\jhtest\bbb.py", line 9, in ?
f = file("sys.argv[1]")
IOError: [Errno 2] No such file or directory: 'sys.argv[1]'

also irgendwas mach ich dank meiner unwissenheit falsch! :)
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Montag 10. Juli 2006, 14:14

Mach mal aus:
f = file("sys.argv[1]")

Code: Alles auswählen

f = file(sys.argv[1], "r")
Bei dir ist sys.argv[1] ein String. Eigentlich ist es aber ein Listenelement.
hubiat
User
Beiträge: 20
Registriert: Donnerstag 22. Juni 2006, 09:23

Montag 10. Juli 2006, 14:19

pr0stAta hat geschrieben:Mach mal aus:
f = file("sys.argv[1]")

Code: Alles auswählen

f = file(sys.argv[1], "r")
Bei dir ist sys.argv[1] ein String. Eigentlich ist es aber ein Listenelement.
hab ich gemacht!
nun erhalt ich folgende meldung:

raceback (most recent call last):
File "C:\Apps\Python\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 310, in RunScript
exec codeObject in __main__.__dict__
File "D:\Bildung\python\jhtest\bbb.py", line 9, in ?
f = file(sys.argv[1], "r")
IndexError: list index out of range
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Montag 10. Juli 2006, 14:24

Du solltest dir die Fehlermeldungen schon einmal selber
durchlesen und überlegen was sie bedeuten können, wie willst
du sonst die Sprache wirklich lernen? :) Gerade diese
ist doch wirklich Aussagekräftig.

Das bedeutet, das es keinen Eintrag an der Stelle 1 in der Liste
gibt.
*Vermutung*
Du hast deine Datei nicht mit einem Parameter aufgerufen,
also deiner CSV Datei. Übergib deinem Aufruf deines Scriptes noch
den Namen deiner CSV Datei die hoffentlich im selber Ordner
deines Scriptes liegt.
hubiat
User
Beiträge: 20
Registriert: Donnerstag 22. Juni 2006, 09:23

Montag 10. Juli 2006, 14:50

pr0stAta hat geschrieben:Du solltest dir die Fehlermeldungen schon einmal selber
durchlesen und überlegen was sie bedeuten können, wie willst
du sonst die Sprache wirklich lernen? :) Gerade diese
ist doch wirklich Aussagekräftig.

Das bedeutet, das es keinen Eintrag an der Stelle 1 in der Liste
gibt.
*Vermutung*
Du hast deine Datei nicht mit einem Parameter aufgerufen,
also deiner CSV Datei. Übergib deinem Aufruf deines Scriptes noch
den Namen deiner CSV Datei die hoffentlich im selber Ordner
deines Scriptes liegt.
danke super! ich affe hab das im python gesstartet! *tz*
in der commandline hats funktioniert! :)
DANKE für DEINE Hilfe! Hast mir viiiel weitergeholfen!!!!

wie kann ich eigentlich, wenn ich mit diesem csv modul arbeite, diesem sagen, dass ich bestimmte datensätze, welche gequotet sind, dennoch richtig bearbeite?!
hab derzeit anstelle der namensausgabe eine leerzeile in meinem ausgabe file! :-/
Antworten