__blackjack__ hat geschrieben: ↑Mittwoch 7. April 2021, 17:55
@bert321: Da kommt keine Ausgabe in einem anderen Prozess an, die beiden Prozesse tauschen keinerlei Daten aus.
Es werden im Elternprozess auch am laufenden Band Zombieprozesse erzeugt, weil die `Popen`-Objekte nicht sauber mit `wait()` behandelt werden.
Da hast du natürlich recht. Das hatte ich übersehen.
__blackjack__ hat geschrieben: ↑Mittwoch 7. April 2021, 17:55
@bert321: Da kommt keine Ausgabe in einem anderen Prozess an, die beiden Prozesse tauschen keinerlei Daten aus.
Was willst Du denn *eigentlich* machen? Wenn beides in Python geschrieben ist, dann wäre das vielleicht eher ein Fall für das `concurrent.futures`-Modul oder `multiprocessing`.
Ich habe ein bereits fertiges Skript was für die Kommunikation über einen Bus zuständig ist und quasi in einer Endlosschleife laufen muss. Des weiteren habe ich auch noch ein C++ Programm, was genauso in einer Endlosschleife laufen muss.
Ich habe gerade mal versucht das ganze mithilfe von diesem Tutorial zu realisieren (Allerdings mit einer C++ und Python Datei):
https://www.geeksforgeeks.org/python-su ... languages/
Hier habe ich quasi zwei dateien erstellt. Ein Python Skript mit:
Code: Alles auswählen
import subprocess
import os
def executeCpp():
# create a pipe to a child process
data, temp = os.pipe()
# write to STDIN as a byte object(convert string
# to bytes with encoding utf8)
os.write(temp, bytes("5 10\n", "utf-8"));
os.close(temp)
# store output of the program as a byte string in s
s = subprocess.check_output("g++ HelloWorld.cpp -o out2;./out2", stdin=data,shell=True)
# decode s to a normal string
print(s.decode("utf-8"))
if __name__=="__main__":
while True:
executeCpp()
/[code]
und eine C++ Datei mit:
[code]
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << "Hello World from C++.Values are:" << a << " " << b;
return 0;
}
Funktioniert auch soweit. Nur sobald ich in der C++ Datei den Part mit cout in eine while schleife setze, also so:
Code: Alles auswählen
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << "Hello World from C++.Values are:" << a << " " << b;
return 0;
}
kommt in meinem Python Skript nichts mehr an.
Ist meine Vermutung richtig, dass ich mit subprocess.check_output nur den C++ Code einmal kurz starte, warte bis es durchgelaufen ist und dann die Ausgabe aus dem C++ Code bekomme? Also ist das Problem dass das so nicht funktionieren kann?
ThomasL hat geschrieben: ↑Donnerstag 8. April 2021, 06:22
aber warum so?
Dachte das wäre äquivalent, bisher...