grep:破管错误python 2.2

问题描述:

我正在考虑一堆脚本,并在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'模块存在。我被迫使用这些限制。

谢谢。

只要您的脚本写入了数据并退出,它看起来像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

我认为问题是由bash脚本设置的环境变量没有被传递到python脚本的os.system()调用。考虑从python脚本中设置这些envars。本身。

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

我的最后一行是:

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

感谢您的帮助虽然。