Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Python-Programm in LUA aufrufen, aber nicht warten bis es beendet ist

Frage Entwicklung

Mitglied: mabue88

mabue88 (Level 2) - Jetzt verbinden

19.02.2013, aktualisiert 23:26 Uhr, 2698 Aufrufe, 5 Kommentare

Hallo Zusammen,
ich hab mal wieder eine Frage:
ich muss mit der Programmiersprache LUA ein Python-Programm starten.
Das ist soweit kein Problem. Das Python-Programm benötigt allerdings etwas Zeit bis es beendet ist. Solang will/kann ich nicht mit dem LUA-Programm warten.
Gibt es eine Möglichkeit das Python-Programm aufzurufen und anschließend sofort im LUA-Programm weiterzuarbeiten ohne auf das Beenden des Python-Programms zu warten?

Danke
mabue88
Mitglied: hmarkus
19.02.2013 um 12:48 Uhr
Hallo mabue88,

eine spontane Idee, ich bin kein Programmierer: fork. Also unter Unix/Linux wird man das so machen, dass das Lua-Programm mit dem fork-Systemaufruf das Python-Programm startet. http://de.wikipedia.org/wiki/Fork_(Unix)
Du schreibst nicht, auf welchem Betriebssystem Du programmierst, aber unter Windows sollte es was Vergleichbares geben.


Für Perl gibt es fork als Systemaufruf, Python und Lua kenne ich nicht, aber für Lua sollte es das auch geben.

Markus
Bitte warten ..
Mitglied: mabue88
19.02.2013 um 13:52 Uhr
Hallo Markus,

prima Hinweis. Habs hinbekommen.
Ich programmiere in Linux/Debian auf einem Raspberry Pi.

Hier meine Lösung:

posix-Paket installieren:
01.
sudo apt-get install lua-posix-dev
Danach kann das LUA-Programm angepasst werden:
01.
	local posix = require "posix" 
02.
	local pid = posix.fork() 
03.
	 
04.
	-- Wenn PID = 0, dann handelt es sich um das Kind 
05.
	if(pid == 0) then 
06.
		os.execute("./python_prog.py") 
07.
	end
Damit funktioniert das wunderbar!
Danke!
Bitte warten ..
Mitglied: mabue88
19.02.2013 um 23:26 Uhr
Leider bin ich doch noch nicht ganz am Ziel.

Die mit dem Code erzeugen Kinderprozesse werden nicht beendet. Das heisst, dass ich irgendwann zig hunderte Prozesse am Laufen habe. Das heisst ich muss den erstellen Kindprozess nach dem "os.execute()" gezielt beenden.

Aber wie macht man das?
Bitte warten ..
Mitglied: hmarkus
19.02.2013, aktualisiert um 23:43 Uhr
Wie gesagt, ich bin kein Programmierer, vielleicht postet hier noch jemand der sich besser auskennt.

Du kannst den Kindprozess anhand der PID killen, ggf. auch per Name. Hier http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammie ... steht was. Die Sache mit dem fork ist eigentlich sehr gut dokumentiert. Im Zweifel kannst Du mit parsen z.B. von
ps -e
herausfinden, welche PID der Prozess hat. Normalerweise sollte aber auch der fork-Aufruf in Lua die PID zurückgeben, aber das sind Dinge mit denen ich mich nicht gut auskenne.

Wichtig ist, dass Du verstehst, dass fork ein Unix-Systemaufruf ist, das hat mit der jeweiligen Programmiersprache nur am Rande zu tun.

Generell suche mit Google nach "Unix-Systemprogrammierung", da findest Du die nötigen Infos (hoffentlich).

Markus
Bitte warten ..
Mitglied: mabue88
28.02.2013 um 17:59 Uhr
Ich habe das Problem jetzt so gelöst:

In dem LUA-Skript rufe ich ein Programm auf, das ich in C geschrieben habe. Die ganze Sache mit dem fork erledige ich dann in diesem Programm. Der Elternprozess wird geschlossen, das LUA-Skript läuft weiter und der Kindprozess kann vor sich hinarbeiten.

@hmarkus: Danke für deine Unterstützung!
Bitte warten ..
Ähnliche Inhalte
Windows Tools
gelöst Was treibt das Programm? (11)

Frage von daho2016 zum Thema Windows Tools ...

C und C++
gelöst C++ andere EXE aufrufen, Probleme mit Leerzeichen im Pfad (14)

Frage von pablovic zum Thema C und C ...

Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(2)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Systemdateien
Warum System auf "C:" (29)

Frage von DzumoPRO zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
Cisco SG200: Auf bestimmtem vLAN bestimmte TCP-Ports sperren (16)

Frage von SarekHL zum Thema LAN, WAN, Wireless ...

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Cloud-Dienste
gelöst Bitcoins minen über Nacht? (16)

Frage von 1410640014 zum Thema Cloud-Dienste ...