os.system并写入文件

时间:2015-01-08 07:28:41

标签: python c++ file-io

我有一个运行模拟的代码。为了节省时间,我有两个部分的其他代码(一个在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);

0 个答案:

没有答案