我試圖從基於GUI的軟件啓動幾個bash例程 。我面臨的問題是管道問題。 這裏測試的bash腳本(bashScriptTest.sh):斷管錯誤Python子流程
#!/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
而且這裏的Python腳本,創建錯誤:
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])
你可以從運行python腳本看到,遇到斷管錯誤 不在前三個管道(第一行)中,而是在awk完成大量工作之後。 我需要在bash 中管理大量的例程和子例程,並且還使用shell == True標誌不會改變任何事情。 我試圖以最pythonic的方式寫所有東西,但不幸的是沒有 機會我可以重寫python中的所有管道步驟。 另一件要提到的是,如果你測試終端內的bash腳本 一切工作正常。 任何幫助將非常感激。提前致謝!
編輯1:
包含錯誤日誌文件說:
bashScriptTest.sh
log.txt
stack.txt
testFile2.txt
test.py
3
sort: write failed: standard output: Broken pipe
sort: write error
請添加錯誤消息和堆棧跟蹤! :) –
你什麼時候等待進程結束? –
@AndréLaszlo我編輯了這個問題! – Mat