2012-07-17 41 views
0

我正在考慮一堆腳本,並在python中爲它們創建一個包裝。我沒有創建給我的腳本。目前我正在使用Python 2.2,而我正在使用的shell是一個csh shell。grep:破管錯誤python 2.2

當我運行在以下方式的腳本:

>> setenv some_var '/some/path/' 
>> <some more setenv> 
>> ./script -flag >& log.txt < /dev/null & 

它運行的完美的罰款。

當我使用bash包裝來調用我的python包裝時,問題就出現了。我的bash腳本(analysis.sh)如下:

#!/bin/bash 
#environment variables 
ENV1='/path/for/env1' 
ENV2='/path/for/env2' 

export ENV1 
export ENV2 

./run_analysis.py [email protected] 
exit 

在我的Python文件,所有我基本上做的是執行

.... 
os.system(script_path + script_name + script_flag) 
.... 

每當我在CSH以下方式運行該腳本外殼:

./analysis.sh -flag script_name >& log.txt < /dev/null & 

腳本一下子給了我一堆破管的錯誤(「grep的:寫作輸出:殘破的管道」)。我知道腳本確實使用了很多grep。我只是不明白爲什麼這些錯誤會在我執行重定向時彈出。在python 2.2中,只有'os'和'commands'模塊存在。我被迫使用這些限制。

謝謝。

回答

0

只要您的腳本寫入了數據並退出,它看起來像grep(某處)仍然希望能夠從管道中讀取,管道中不再存在,因爲您的腳本已經激活 - 因此破損的管道。

+0

那麼你是說擺脫在bash腳本中的「退出」?爲什麼會達到這種說法?不僅會到達這裏一次./run_analysis完成了嗎? – de1337ed 2012-07-17 16:24:25

+0

@ de1337ed - 沒有說什麼 - 只是解釋情況是什麼...... – 2012-07-17 16:25:18

+0

我需要在python腳本中執行某種waitpid嗎? – de1337ed 2012-07-17 16:28:45

0

我認爲問題是由bash腳本設置的環境變量沒有被傳遞到python腳本的os.system()調用。考慮從python腳本中設置這些envars。本身。

0

想通了。我不得不在os.system()調用中運行重定向命令。如果我在外面跑它,它不會工作。

我的最後一行是:

os.system(script_dir + script + script_flag + " >> log.txt 2>&1 < /dev/null &") 

感謝您的幫助雖然。