Ich versuche, mehrere Bash-Routinen von einer GUI-basierten Software zu starten. Das Problem, mit dem ich konfrontiert bin, ist ein Problem mit der Verrohrung. Hier der Test Bash-Skript (bashScriptTest.sh):Broken-Pipe-Fehler Python-Subprozess
#!/bin/bash
#---------- Working
ls | sort | grep d > testFile.txt
cat testFile.txt
#---------- NOT working
echo $RANDOM > testFile2.txt
for i in `seq 1 15000`; do
echo $RANDOM >> testFile2.txt
done
awk '{print $1}' testFile2.txt | sort -g | head -1
Und hier das Python-Skript, das den Fehler erzeugt:
import subprocess
#
with open('log.txt','w') as outfile:
CLEAN=subprocess.Popen("./bashScriptTest.sh", stdout=outfile, stderr=outfile)
print CLEAN.pid
OUTSEE=subprocess.Popen(['x-terminal-emulator', '-e','tail -f '+outfile.name])
Wie Sie läuft das Python-Skript sehen können, die Broken-Pipe-Fehler ist aufgetreten nicht in den ersten drei Rohren (erste Zeile), sondern nach der großen Arbeit von awk getan. Ich muss eine große Menge von Routine und Subroutinen in Bash verwalten und auch mit der Shell == True Flag ändert sich nichts. Ich habe versucht, alles auf die pythonischste Art und Weise zu schreiben, aber leider gibt es keine Chance, ich kann alle Piping-Schritt in Python neu schreiben. Eine andere Sache zu erwähnen ist, dass, wenn Sie das Bash-Skript in einem Terminal testen, alles gut funktioniert. Jede Hilfe würde wirklich geschätzt werden. Danke im Voraus!
EDIT 1:
Die Log-Datei mit dem Fehler sagt:
bashScriptTest.sh
log.txt
stack.txt
testFile2.txt
test.py
3
sort: write failed: standard output: Broken pipe
sort: write error
Bitte geben Sie die Fehlermeldung und Stack-Trace hinzuzufügen! :) –
Wann warten Sie, bis die Prozesse enden? –
@ AndréLaszlo Ich habe die Frage bearbeitet! – Mat