开发者

Variables in python os.path

I am new to python and I'm trying to create a program that creates a directory with todays date, create a sandbox into that directory and run the make file in the sandbox. I am having trouble getting the variables to be picked up in the os.path lines. The code is posted below:

#!/开发者_如何学JAVAusr/bin/python  
import mks_function  
from mks_function import mks_create_sandbox  
import sys, os, time, datetime  
import os.path  

today = datetime.date.today()  # get today's date as a datetime type  

todaystr = today.isoformat()   # get string representation: YYYY-MM-DD  
                           # from a datetime type.  

if not os.path.exists('/home/build/test/sandboxes/'+todaystr):  
 os.mkdir(todaystr)  
else:  
 pass  

if not os.path.exists('/home/build/test/sandboxes/'+todaystr+'/new_sandbox/project.pj'):  
 mks_create_sandbox()  
else:  
 pass  

if os.path.exists('/home/build/test/sandboxes/'+todaystr+'/new_sandbox/Makefile'):  
 os.system("make >make_results.txt 2>&1")  

Any help would be appreciated, Thanks


a couple of notes:

#!/usr/bin/env python  
# import mks_function .. you won't need this ...

from mks_function import mks_create_sandbox  
import os, datetime  

# import time, sys .. these aren't used in this snippet 
# import os.path .. just refer to os.path, since os is already imported

# get today's date as a datetime type  
todaystr = datetime.date.today().isoformat()  

# .. use os.path.join()
if not os.path.exists(os.path.join('/home/build/test/sandboxes/', todaystr)):  
    os.mkdir(os.path.join('/home/build/test/sandboxes/', todaystr))  
# .. 'else: pass' is unnecessary

if not os.path.exists(os.path.join(
    '/home/build/test/sandboxes/', todaystr, '/new_sandbox/project.pj')):  

    # i'm not seen, that the sandbox is created in the right directory here
    # maybe you should change the working directory via ..
    # os.chdir(os.path.join('/home/build/test/sandboxes/', todaystr))
    mks_create_sandbox()  

if os.path.exists(os.path.join(
    '/home/build/test/sandboxes/', todaystr, '/new_sandbox/Makefile')):  

    # .. change to the right directory
    os.chdir(os.path.join(
        '/home/build/test/sandboxes/', todaystr, '/new_sandbox/'))

    os.system("make > make_results.txt 2>&1")  


Please try adding chdir code before you call make

if os.path.exists('/home/build/test/sandboxes/'+todaystr+'/new_sandbox/Makefile'):
 os.chdir('/home/build/test/sandboxes/'+todaystr+'/new_sandbox/')
 os.system("make >make_results.txt 2>&1")


I think you want to change a few things:

def makeSandbox():
  sbdir = os.path.join('/home/build/test/sandboxes/',todaystr)
  if not os.path.exists(sbdir):  
    os.mkdir(sbdir)  # <- fully qualified path
  else:  
    pass

And I don't really see what variables need to be picked up, seems fine to me.


Not sure what the module mks_function does. But I see one issue with your code.

For example,

if not os.path.exists('/home/build/test/sandboxes/'+todaystr):   
  os.mkdir(todaystr)   

In the above chunk you check if the directory "/home/build/test/sandboxes/+'todaystr'" exists and a create a directory by name "value contained in todaystr" (say 2009-12-21). This creates directory by name '2009-12-21' in the current working directory, rather than under : /home/build/test/sandboxes which is what you intended I guess. So change to the above directory before the call to mkdir. Also it is good to check the return status of mkdir to verify if the directory creation succeeded.


path module might help in this case:

#!/usr/bin/env python  
from mks_function import mks_create_sandbox  
import os, datetime  

from path import path

sandboxes = path('/home/build/test/sandboxes/')
today = sandboxes / datetime.date.today().isoformat()
today.mkdir() # create directory if it doesn't exist

project = today / "new_sandbox/project.pj"
project.parent.mkdir() # create sandbox directory if it doesn't exist
if not project.isfile():  
   mks_create_sandbox()  

makefile = project.parent / "Makefile"
if makefile.isfile():
   os.chdir(makefile.parent)  
   os.system("make >make_results.txt 2>&1")
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜