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 运行它,它不会产生错误消息,会产生正确的控制台输出(基本上说“在 blah 处创建文件”的消息),但是当它通常生成两个时,不会产生任何文件。我没有收到任何权限错误或任何东西,并确保目录已正确修改。

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 回答