我有一个运行模拟的代码。为了节省时间,我有两个部分的其他代码(一个在python中,另一个在C ++中)将自动在可用的几个节点上启动我的模拟代码,同时考虑到可用的内存等。
在我的模拟代码中,我需要在最后一行将值写入文件。目标是在上面提到的文件中一个接一个地写出所有模拟的结果。 如果我手动运行"我的模拟代码几次一个接一个地得到我想要的东西,但是当我使用代码自动执行时,结果写在文件的第一行,从而删除了以前的结果(或者每次删除文件后)模拟)。
我首先想到的是,从多个模拟代码实例同时访问该文件可能是个问题,但即使在一个模拟运行的时候它也无法运行。
在python代码中,命令以os.system(我的命令)发送。
有人可以帮助我吗?
谢谢。
编辑:要在文件中写入的C ++命令行:
int SimJob::WriteValueToFile(std::basic_string<char> fileName, dcmplx *val)
{
std::ofstream fsol(fileName.c_str(),std::ios::app);
if (!fsol.is_open()) {
std::cout << "Error opening output file: " << fileName << std::endl;
return 1;
}
fsol << std::scientific;
fsol.precision(20);
fsol <<*val <<" "<< lambda <<" "<< eps <<std::endl;
fsol.close();
return 0;
}
Python代码eigen.py(不是我写的)
import os.path
import os
import time
import sys
folder='/home/gbernasc/run/'+sys.argv[1]+'/'
randstring=sys.argv[2]
tempFolder='/tmp/gbernasc/'
n=int(sys.argv[3])
jobID=str(n)+'.xml'
solID=str(n)
os.chdir(folder)
print os.getcwd()
if(os.path.exists(jobID)):
job=open(jobID,'r')
jobScan=job.readlines()
job.close()
meshFile=jobScan[5]
meshFile=meshFile.replace('\n','')
tempFoldercur=tempFolder+randstring+'/'
os.system('mkdir -p '+tempFolder)
os.system('mkdir '+tempFoldercur)
os.system('cp '+jobID+' '+tempFoldercur)
os.system('cp '+meshFile+' '+tempFoldercur)
#os.system('cp points '+tempFoldercur)
os.chdir(tempFoldercur)
logID=str(n)+'.log'
os.system('SIENanoC -j '+ jobID) #+' > A'+logID)
os.system('mv *sol '+folder)
os.system('mv A'+logID+' '+folder)
os.chdir(folder)
os.system('rm -rf '+tempFoldercur)
此代码(eigen.py)在另一个C ++程序中调用为:
sprintf(launchjob,"screen -L -S %s -d -m python /home/gbernasc/bin/eigen.py %s %s %d", simqueue.begin()->name,simqueue.begin()->dir,simqueue.begin()->name,simqueue.begin()->index);