Как сделать путь программы Python независимым? - PullRequest
0 голосов
/ 08 июня 2011
from django.shortcuts import render_to_response
from django.template import RequestContext
from shapes.forms import UploadForm
import os

# TODO convert this to using ModelForm with a custom Django FileField
# For now we just stick an uploaded shapefile into a project directory

def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.handle(request.FILES['file_obj'])
            os.system('python ../../../automate.py') 
            #form.save() # if a modelform
            #form.cleaned_data['user'] = request.user

            return render_to_response('uploaded.html', RequestContext(request,{}))
    else:
        form = UploadForm()
    return render_to_response('upload.html', RequestContext(request,{'form': form}))

Это мой код, который os.system ('python ../../automate.py)

и мой automate.py имеет это

import os
os.system('python unzip.py -z data/Parking.zip -o data/')
os.system('python manage.py ogrinspect  data/Parking.shp Parking --srid=4326 --mapping --multi > output.txt')
filename='output.txt'
filename1='maps/models.py'
search="class Parking(models.Model):"
add="\n    layer_id= models.ForeignKey(Sdr_Layer)"
content=open(filename,'r').read()
content=content.replace(search,search+add)
fp=open(filename,'w')
fp.write(content)

content1=open(filename1,'r').read()

search1="layer_attribute_name = models.CharField(max_length = 100)"
add1 = "\n" + content
#print add1  
#print search1+add1
content1=content1 + add1
print content1 
fp1=open(filename1,'w')
fp1.write(content1)
fp1.close()
fp.close()

os.system('python manage.py syncdb')

Оба находятся на совершенно разных путях, поэтому, очевидно, они дают мне ошибки. То, что я хочу, это две вещи.

  1. Я не хочу указывать «data / Parking.shp». Он должен сам получить имя из загруженного файла и использовать его в automate.py.

  2. automate.py использует maps / models.py. Что, очевидно, дает мне ошибку, когда я выполняю этот файл по другому пути. Итак, как мне сделать код независимым от всех ошибок этого пути.

1 Ответ

0 голосов
/ 08 июня 2011
  1. Вместо вызова модуля unzip.py в командной строке, вызовите его напрямую как модуль python (import unzip и т. Д.), Чтобы получить результаты метода unzip.Это должно требовать только базовых адаптаций.

  2. Вы можете получить каталог модуля через его параметр __file__, как показывает этот другой вопрос SO .Обратите внимание, что это работает только в командной строке (python toto.py), но не с IDLE, например (это хорошо объяснено здесь )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...