2016-11-04 8 views
0

Ich habe zwei Spinnen A und B. Ich brauche eine Funktion aufzurufen, dieRufen Sie eine Funktion in den Einstellungen von Spider Scrapy

in der Spinne settings.py-Datei definiert ist

Project Name |--Project Name | |-- spiders | | |-- __init__.py | | |-- A.py | | |-- B.py | |-- __init__.py | |-- items.py | |-- pipelines.py | |-- settings.py

Es gibt eine Funktion in settings.py, die ich von A.py und B.py auf nahe zugreifen müssen Spinnen

settings.py

def revoke_ip(): 
    logging.info('Revoking access') 

Das ist, was ich von A.py versucht:

def closed(self, reason): 
    logging.info('Spider terminating because of %s' % reason) 
    current_project_settings = get_project_settings() 
    revoke_ip_call = getattr(current_project_settings, "revoke_ip") 
    revoke_ip_call() 

Aber dieses Ding nicht funktioniert auch nicht, was here

erwähnt

Gibt es etwas, was ich falsch oder andere Art und Weise, es zu tun tue?

Antwort

1

Beim Importieren einer Datei durchsucht Python nur das aktuelle Verzeichnis, das Verzeichnis, aus dem das Einstiegspunktskript ausgeführt wird, und sys.path, das Positionen wie das Paketinstallationsverzeichnis enthält. Sie können die Einstellungsdatei importieren, um die Funktion aufzurufen. Um dies zu tun, fügen Sie diese an Ihre Funktion:

import sys 
sys.path.insert(0, '../') 
import settings 
+0

Und wie rufe ich die Funktion widerrufen, settings.revoke()? Wenn ich den Crawler aus dem äußeren 'Projektnamen'-Ordner als 'scrapy crawl A' ausführen, erhalte ich eine Fehlermeldung' ImportError: Kein Modul namens settings' – Vaulstein

+0

Dieses Ding löste mein Problem teilweise, also stimme ich der Antwort zu. Vielen Dank! – Vaulstein

+1

Wenn Sie Ihr Projekt aus einem anderen Ordner ausführen, müssen Sie angeben, welcher Ordner das Modul enthält, das Sie verwenden möchten. Sie können versuchen, einen absoluten Pfad zum Einstellungsmodul zu verwenden. Gern geschehen, ich hoffe es hilft. –

0

Was für mich gearbeitet, dank der Antwort, dass @Jose gebucht, das war als settings.py in einem anderen Verzeichnis als die Spinne war, die ich lief und Python nur Durchsucht das aktuelle Verzeichnis. So

Ich habe versucht, den Pfad der Datei überprüft, die es jede Zeit ich die Spinne laufen gibt und anscheinend den Weg, den ich bekomme

/tmp/unpacked-eggs/__main__.egg/project name/spiders 

Also, was ich tun musste, war:

import sys 
import os 
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + '/../') 
import settings 
Verwandte Themen