Seite 1 von 1

Systemaufrufe

Verfasst: Samstag 12. Oktober 2002, 23:24
von hans
Ich hoffe von euch hat jemand gvim installiert, das ist nämlich ein unheimlich guter Editor. Aber was mich an dem Ding auch neugierg macht, ist, das man den ganz normal aus einer Kommandozeile raus aufruft und dann kann man weiterarbeiten und auch das Terminal schließen. Und der läuft immer noch.

Kann mir mal jemand verraten, welche Technik dahintersteckt und ob das in Python realisierbar ist?

Hans

Verfasst: Samstag 12. Oktober 2002, 23:59
von Dookie
Hi hans,

ich würde sowas, in Linux, mit nem kleinen vorgeschalteten Shellscript machen.

# Starten und endkoppeln
python programm.py &
disown %python


Gruß

Dookie

Verfasst: Sonntag 13. Oktober 2002, 10:10
von hans
Dookie hat geschrieben:ich würde sowas, in Linux, mit nem kleinen vorgeschalteten Shellscript machen.
Dookie, das ist es ja gerade was mich an der gvim - lösung so fasziniert. Nix Shellscript, Nix "&", es geht einfach so! Aber wie und warum?

Ich emfinde es als äußerst angenehm, wenn ich einen Editor mal eben so aus der Kommandozeile starten kann und diese anschließend sofort wieder frei ist.

Hans

Verfasst: Dienstag 15. Oktober 2002, 17:33
von joerg
hans hat geschrieben: Ich emfinde es als äußerst angenehm, wenn ich einen Editor mal eben so aus der Kommandozeile starten kann und diese anschließend sofort wieder frei ist.
Hans
Das geht natürlich auch mit Python-Mitteln. Sonst könnte man ja gar keine Serverdienste implementieren, die sollen sich ja auch nicht beenden, wenn die aufrufende Shell stirbt.
Hier mal der relevante Ausschnitt aus einem speziellen XMLRPC-Dienst, an dem ich arbeite.
Ist aber auch teilweise abgeschrieben... :oops:
Das mit stdout mußt Du natürlich anpassen..., und os und sys müssen importiert sein.

Code: Alles auswählen

    ...
    if '--daemon' in sys.argv:
        # turn server into a robust daemon
        # stolen from daemonize.py by Coy Krill (ckrill@qvlinc.com)
        if (not os.fork()):
            # get our own session and fixup std[in,out,err]
            os.setsid()
            sys.stdin.close()
            sys.stdout = open(os.path.join(logDir, 'NetSim.log.'+str(os.getpid())), 'w')
            sys.stderr = sys.stdout
            if (not os.fork()):
                # hang around till adopted by init
                ppid = os.getppid()
                while (ppid != 1):
                    time.sleep(0.5)
                    ppid = os.getppid()
            else:
                # time for child to die
                os._exit(0)
        else:
            # wait for child to die and then bail
            os.wait()
            sys.exit()
    # still alive? - hier geht's dann weiter mit dem normalen Code!
    ...

Viel Glück!

Jörg

Verfasst: Dienstag 15. Oktober 2002, 17:54
von Dookie
Hui, das geht aber schon tief in die Eingeweide :shock:


Gruß

Dookie

Verfasst: Dienstag 15. Oktober 2002, 19:28
von hans
Starker Tobak!

Die wenigen blonden Haare die ich noch habe, werde ich mir am Wochenende dann auch noch ausraufen :( :cry:

Hans