0

たくさんのスクリプトを取り込み、それらのラッパーを Python で作成しています。私に与えられたスクリプトを作成しませんでした。現在、私は python 2.2 を使用しており、使用しているシェルは csh シェルです。

次の方法でスクリプトを実行すると:

>> 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シェルで次の方法でスクリプトを実行するたびに:

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

スクリプトを実行すると、突然パイプの破損に関するエラーが大量に発生します ("grep: 出力の書き込み: パイプの破損")。スクリプトが多くの grep を使用していることは知っています。リダイレクトを実行すると、これらのエラーがポップアップする理由がわかりません。Python 2.2 では、'os' と 'commands' モジュールのみが存在します。これらの制約を使用することを余儀なくされています。

ありがとうございました。

4

3 に答える 3

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 スクリプト内からこれらの環境変数を設定することを検討してください。自体。

于 2012-07-18T06:20:45.110 に答える
0

スクリプトがデータを書き込んで終了するとすぐに、grep (どこか) がまだパイプから読み取ることができることを期待しているように見えますが、スクリプトが興奮しているため存在しなくなり、パイプが壊れています。

于 2012-07-17T16:12:50.147 に答える