Seite 1 von 1

C-Skript mit Argumenten starten

Verfasst: Donnerstag 4. Mai 2006, 20:14
von tyho
Also ich will ein C-Skript mit 2 Argumenten und zwar folgendermaßen starten:
./rtson.c /dev/ttyS0 100
Das soll dann halt in ein Python-Skript
Ich habs schon mit

Code: Alles auswählen

execfile ("./rtson.c /dev/ttyS0 100")
und mit

Code: Alles auswählen

execfile ("./rtson.c", "/dev/ttyS0", "100")
ausprobiert, ging aber beides nicht. Geht sowas überhaupt mit execfile oder kann man damit nur Pythonskripte ausführen? Und wie sieht das dann aus?

mfg tyho

Verfasst: Donnerstag 4. Mai 2006, 20:22
von murph
Leider habe ich die gegebenden Skripte nicht, deshalb die Frage:
Welche Fehlermeldung gab es?

Verfasst: Donnerstag 4. Mai 2006, 20:42
von ryu
Hi,
vielleicht solltest du die Sourcedatei kompilieren. Dann kannst du die Binary normal mit Python ausführen. C ist nämlich keine Skriptsprache.

Verfasst: Donnerstag 4. Mai 2006, 21:37
von Leonidas
Die Datei musst du erstmal kompilieren, denn C-Code ist eigentlich nicht direkt ausführbar (außer du nutzt sowas wie Ch, CINT oder EiC). Dann kannst du das Programm über das subprocess-Modul starten.

Verfasst: Freitag 5. Mai 2006, 17:26
von tyho
sorry das ich jetzt erst antworte
so ich glaube der code ist schon kompiliert, ich kenn mich bei c nicht aus, es gibt aber eine rtson.c und eine datei, die einfach rtson heißt und die ist ausführbar, habs grade ausprobiert.
so jetzt zu den fehlern:

Code: Alles auswählen

>>> execfile("/home/till/Documents/Steuerung/rtson /dev/ttyS0 10")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
IOError: [Errno 2] No such file or directory: '/home/till/Documents/Steuerung/rtson /dev/ttyS0 10'
sowie

Code: Alles auswählen

>>> execfile("/home/till/Documents/Steuerung/rtson", "/dev/ttyS0", "10")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: execfile() argument 2 must be dict, not str
Das erste ist mir klar, er versteht offenbar nicht, dass "/dev/ttyS0" und "10" Argumente sein sollen.
Mir fällt grad auf, dass er beim 2. auf jeden Fall schonmal die datei ausgeführt hat. Aber warum verlangt der ein dictionary, oder was ist dict? ich mein, wenn ichs direkt starte, ist das argument ja auch kein dictionary. warum verlangt er, wenn ichs über python mach, dann plötzlich eins?

Verfasst: Freitag 5. Mai 2006, 18:12
von Leonidas
tyho, ich hab doch schon geschrieben dass man dazu subprocess und nicht execfile benutzt. Execfile ist für Python-Dateien gedacht, die vom Interpreter dann ausgeführt werden. subprocess startet dagegen externe Prozesse und das ist genau das was du suchst.

Verfasst: Freitag 5. Mai 2006, 21:26
von tyho
ah sorry den satz habe ich überlesen
aber beantwortet genau meine frage
dankeschön :D

Verfasst: Samstag 6. Mai 2006, 08:10
von jens
Und immer wieder gern rausgesucht: [wiki]Neue Features#Subprocess[/wiki] 8)

Verfasst: Samstag 6. Mai 2006, 12:23
von Leonidas
jens hat geschrieben:Und immer wieder gern rausgesucht: [wiki]Neue Features#Subprocess[/wiki] 8)
Wahnsinn, hatte ich eine gute Idee das zu schreiben, wird wohl inzwischen die meistverlinkte Seite im Wiki sein ;)

Verfasst: Samstag 6. Mai 2006, 15:03
von tyho
die beschreibung ist wirklich gut
auch für newbies (wie mich) geeignet

Verfasst: Samstag 6. Mai 2006, 18:58
von tyho
aber wie übergeb ich mit subprocess des argument?

Verfasst: Sonntag 7. Mai 2006, 11:46
von Leonidas
tyho hat geschrieben:aber wie übergeb ich mit subprocess des argument?
So wie im Wiki beschrieben: 'touch stamp', wobei stamp das Argument ist. Ebenso wie bei 'ls -l' wo -l das Argument ist. Stringoperationen lassen grüßen (ggf. Forensuche anwerfen).

Verfasst: Montag 19. Juni 2006, 14:58
von tyho
vielen dank nochmal!
habs jetzt aber mit os.system() gemacht, da auf dem pc noch python 2.3 lief und ich nicht wirklich nachteile an os.system sehen konnte 8)