Den Rückgabewert einer Shell-Abfrage weiter verwenden?

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.
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Den Rückgabewert einer Shell-Abfrage weiter verwenden?

Beitragvon ivka_sto » Donnerstag 24. April 2008, 13:47

Hallo,


Ich habe leider im Netz kene Hinweise gefunden, die mich nicht noch mehr verwirrt haben .. also die Frage an euch:

Ich will im Code eine Linux-Einstellung über den Shell abfragen (den Status der Core-Dump-Generierung [ulimit -c]), und ggfs die Core-Generierung ausschalten. Also mach ich das so

Code: Alles auswählen

if os.system('ulimit -c') != 0:
   print 'To turn off CoreDump: type in shell ulimit -c 0'


Was natürlich nicht geht. "a = os.system('ulimit -c')" geht auch nicht. Ich vermute, das wird mit stdout zu lösen sein, aber ich habe keinen Beispiel gefunden, der in einer ähnlichen Richtung geht.

Weiß vllt jemand was?


VG, ivka_sto
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 24. April 2008, 13:58

Wenn du Stdout lesen willst, dann solltest du dir das Modul subprocess ansehen. Beispiele gibt es hier im Forum mehr als genug.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Beitragvon ivka_sto » Donnerstag 24. April 2008, 14:11

Gerade weil ich so viele Bsp mit subprocess gefunden habe, komm ich nicht klar: Ich hab leider nur Python 2.3 drauf, subprocess gibt's erst ab 2.4. Unterschiede gibt's genung, mit popen kann man z.B. kein Shell-Attribut setzen usw.

VG
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 24. April 2008, 14:17

subprocess ist pure Python. Du kannst es einfach kopieren und nutzten ;)

EDIT: Also hier ist die Datei, direkt aus dem trunk:
http://svn.python.org/view/python/trunk ... iew=markup

Einfach zu dem Skript kopieren und normal benutzten. Sollte gehen, aus dem DocString:
This module should remain compatible with Python 2.2, see PEP 291.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

Beitragvon lunar » Donnerstag 24. April 2008, 14:30

Und nach Möglichkeit auf 2.5 wechseln, Python 2.3 wird schon lange nicht mehr unterstützt, was schon beträchtliche Sicherheitsbedenken nach sich ziehen muss.
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Beitragvon ivka_sto » Donnerstag 24. April 2008, 14:35

Kann ich leider nicht, ich mach es nicht zu Hause und muß mich in das gemeinsame Linux-System einloggen .. und dann kann ich ja nichts nachinstallieren :?

Danke für die Hilfe allerseits :)
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 24. April 2008, 14:53

Du könntest dir vielleicht eine lokale installation erstellen, siehe: [wiki]SSH installation[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Beitragvon ivka_sto » Donnerstag 24. April 2008, 16:11

@jens: Hab ich etwa was falsch gemacht, wenn ich beim Ausführen die Fehlermeldung

Process list:
PID TTY TIME CMD
14568 pts/3 00:00:00 bash
14584 pts/3 00:00:00 python
14585 pts/3 00:00:00 ps

Looking for 'hda'...
' ide0: BM-DMA at 0x1000-0x1007, BIOS settings: hda:DMA, hdb:pio\nhda: ST3200822A, ATA DISK drive\nhda: max request size: 1024KiB\nhda: 390721968 sectors (200049 MB) w/8192KiB Cache, CHS=24321/255/63, UDMA(100)\nhda: cache flushes supported\n hda: hda1 hda2\nhda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }\nhda: drive_cmd: error=0x04 { DriveStatusError }\nhda: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error }\nhda: task_no_data_intr: error=0x04 { DriveStatusError }\n'

Trying a weird file...
The file didn't exist. I thought so...
Child traceback:
Traceback (most recent call last):
File "./STATE4.py", line 727, in _execute_child
os.execvp(executable, args)
File "/usr/lib64/python2.3/os.py", line 336, in execvp
_execvpe(file, args)
File "/usr/lib64/python2.3/os.py", line 362, in _execvpe
func(file, *argrest)
OSError: [Errno 2] No such file or directory


zurückbekomme?
VG
BlackJack

Beitragvon BlackJack » Donnerstag 24. April 2008, 21:08

Sehr wahrscheinlich ja. Wie sieht denn `executable` aus und gibt es die Datei wirklich!?
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Beitragvon ivka_sto » Donnerstag 24. April 2008, 21:17

Nee, das krieg ich zurück wenn ich nur den Code kompiliere, der mir die subprocess-Fkt. zusätzlich zur Verfügung stellen soll ..
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 25. April 2008, 14:32

Wenn eine Datei gestartet werden soll, die im Pfad ist, hilft evtl. shell=True oder man gibt den ganzen Pfad zu Datei an...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]