1

Django ビューを介して次のコードを実行するスクリプトがあります。

# generate dag file
        try:
            commandString = [
                'python',
                os.path.join('/srv/nfsshare/transcode50', userFolder, directory, 'condor_execute.py')
            ]
            subprocess.check_call(commandString,
                            stdout=open('/srv/nfsshare/transcode50/output2.txt', 'w'),
                            stderr=subprocess.STDOUT)
        except Exception, e:
            open('/tmp/test_exception.txt', 'w').write(str(e))
            raise

それがすべきことは、私が生成した Python ファイルを実行することです。その正確なコマンドをサーバーのコマンド プロンプト (つまりpython /srv/nfsshare/transcode50/cogden/algorithms/condor_execute.py) から実行すると、問題なく動作し、必要なファイルがそのディレクトリ内に作成されます。ただし、Django から実行すると、エラー メッセージは生成されず、正しいコンソール出力 (基本的に「Created file blah at blah」というメッセージ) が生成されますが、通常は 2 つ生成される場合、ファイルはまったく生成されません。アクセス許可エラーなどは発生せず、ディレクトリが適切に chmod されていることを確認しました。

4

1 に答える 1

1

私はあなたのプロセスがファイルを閉じることに決して慣れていないと思われます(ファイルへの参照がないため、明示的に行うことはできません-スクリプトとして実行している間-インタープリターは停止します-しかし、Djangoはロードされたプロセスなどで異なる動作をします. ..) そして、それはフラッシュするのに十分な大きさではありません - あなたのopen.

with open('/srv/nfsshare/transcode50/output2.txt', 'w') as stdout:   
    subprocess.check_call(commandString, stdout=stdout, stderr=subprocess.STDOUT)

また、変更を加えるときは、Djangoサーバーが再起動/類似していることを確認して、コードがリロードされ、変更が有効になっていることを確認してください。

于 2013-10-24T00:28:03.397 に答える