Django Python脚本不输出文件

时间:2013-10-24 00:07:33

标签: python django subprocess

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

1 个答案:

答案 0 :(得分:1)

我怀疑你的进程永远不会关闭文件(因为你没有明确地做,因为你没有引用它 - 当作为脚本运行时 - 解释器会停止 - 但Django的工作方式与加载不同进程等...)并且它不够大,无法刷新 - 尝试移出open

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

另外,请确保在进行更改时确保Django服务器重新启动/类似,以确保重新加载代码并使更改生效。