我有一个脚本,通过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。
答案 0 :(得分:1)
我怀疑你的进程永远不会关闭文件(因为你没有明确地做,因为你没有引用它 - 当作为脚本运行时 - 解释器会停止 - 但Django的工作方式与加载不同进程等...)并且它不够大,无法刷新 - 尝试移出open
。
with open('/srv/nfsshare/transcode50/output2.txt', 'w') as stdout:
subprocess.check_call(commandString, stdout=stdout, stderr=subprocess.STDOUT)
另外,请确保在进行更改时确保Django服务器重新启动/类似,以确保重新加载代码并使更改生效。