0

我正在接受一堆脚本,并在 python 中为它们创建一个包装器。我没有创建给我的脚本。目前我正在使用 python 2.2,我使用的 shell 是 csh shell。

当我以以下方式运行脚本时:

>> 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 $@
exit

在我的python文件中,我基本上所做的就是执行

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

每当我在 csh shell 上以以下方式运行脚本时:

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

该脚本突然给了我一堆损坏的管道错误(“grep:写入输出:损坏的管道”)。我知道该脚本确实使用了很多 grep。我只是不明白为什么在执行重定向时会弹出这些错误。在 python 2.2 中,只有 'os' 和 'commands' 模块存在。我被迫使用这些约束。

谢谢你。

4

3 回答 3

0

一旦您的脚本写入数据并退出,看起来 grep (某处)仍然希望能够从管道中读取,由于您的脚本已经兴奋,管道不再存在 - 因此管道损坏。

于 2012-07-17T16:12:50.147 回答
0

弄清楚了。

我必须在 os.system() 调用中运行重定向命令。如果我在外面运行它就不起作用。

我的最后一行是:

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

不过感谢您的帮助。

于 2012-07-19T19:48:52.690 回答
0

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

于 2012-07-18T06:20:45.110 回答