Programm mit Parametern aufrufen

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.
Antworten
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

Hey Leute,

Mir stellen sich gerade 2 Fragen:

1. Wie kann ich folgendes Bash Skript in Python nachbauen:

Code: Alles auswählen

#!/bin/sh

/usr/bin/programm "$@"
2. Wie kann ich ein Python Skript kompilieren, so dass ich es einfach per "./skript" aufrufen kann. Ich weiß dass das per Shebang geht, aber wie geht es ohne?

Vielen Dank schonmal!!!
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

1. subprocess.call(['/usr/bin/programm'] + sys.argv[1:])
Lies doch einfach selber die Doku dazu...
2. py2exe
BlackJack

Zu 1:

Code: Alles auswählen

#!/usr/bin/env python
import sys
from subprocess import call

call(['/bin/ls'] + sys.argv[1:])
Zu 2: Im Grunde gar nicht. Irgendwie muss das System ja wissen, womit die Datei ausgeführt werden soll.

Du könntest dem `binfmt`-Kernelmodul *.pyc-Dateien beibringen. Zumindest unter Ubuntu 7.04 scheint das schon der Fall zu sein. Da kann ich *.pyc-Dateien ausführbar machen und einfach wie Programme starten.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

veers hat geschrieben:2. py2exe
Der OP hat von Shebang gesprochen, also muss es wohl um ein Unixoides System gehen, da hilft py2exe gar nicht. Da müsste eher der Installer oder cx_Freeze ran. Wobei aber die Frage bleibt: warum, wenn es doch auch über die Shebang geht?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

Weil das setuid-bit nur bei Binaries funktioniert!
Deshalb kann ich Shebang nicht verwenden!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

In dem Fall helfen auch ein paar Zeilen C:

Code: Alles auswählen

#include <unistd.h>

int main (int argc, char **argv)
 
{
    int ret;
    ret = execl("/usr/bin/python", "python", "/home/rbreu/test.py", 0);
    if (ret)  perror();
} 
Das Ganze mit gcc meinequelle.c -o meinbinary compilieren und fuer dieses Programm das setuid-Flag setzten...
Antworten