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, 2715 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
Python
GUI WYSIWYG Tkinter : python

Frage von confused zum Thema Python ...

Windows 10
Programm während Windows Bootvorgang laden bzw. ausführen (10)

Frage von Marabunta zum Thema Windows 10 ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Exchange Server
Microsoft Exchange Weiterleitung mit anderer primären E-Mail Adresse (14)

Frage von Rene12345 zum Thema Exchange Server ...

Windows Userverwaltung
gelöst Wie verfahrt Ihr mit den Windows-Benutzerkonten und -dateien von ausgeschiedenen Mitarbeitern? (14)

Frage von Bl0ckS1z3 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Devolo DLAN 500 pro Wireless+ (13)

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

E-Mail
gelöst Probleme beim E-Mail Empfang (12)

Frage von TommyB83 zum Thema E-Mail ...