2016-03-11 36 views
1

嘗試運行我的python文件updater.py以SSH連接到服務器並每隔幾個設置的時間間隔運行一些命令。我正在使用APScheduler從__init__.py運行功能update_printer()。最初我得到了working outside of application context error,但有人建議我只從__init__.py導入應用程序。然而,它沒有那麼好。我不斷收到cannot import name 'app'錯誤。燒瓶:無法導入名稱「應用程序」

app.py

from queue_app import app 

if __name__ == '__main__': 
    app.run(debug=True) 

__init__.py

from flask import Flask, render_template 
from apscheduler.schedulers.background import BackgroundScheduler 
from queue_app.updater import update_printer 
app = Flask(__name__) 
app.config.from_object('config') 

@app.before_first_request 
def init(): 
    sched = BackgroundScheduler() 
    sched.start() 
    sched.add_job(update_printer, 'interval', seconds=10) 

@app.route('/') 
def index(): 
    return render_template('index.html') 

updater.py

import paramiko 
import json 
from queue_app import app 

def update_printer(): 
    ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    ssh.connect(app.config['SSH_SERVER'], username = app.config['SSH_USERNAME'], password = app.config['SSH_PASSWORD']) 

... 

文件結構

queue/ 
    app.py 
    config.py 
    queue_app/ 
     __init__.py 
     updater.py 

錯誤

Traceback (most recent call last): 
    File "app.py", line 1, in <module> 
    from queue_app import app 
    File "/Users/name/queue/queue_app/__init__.py", line 3, in <module> 
    from queue_app.updater import update_printer 
    File "/Users/name/queue/queue_app/updater.py", line 3, in <module> 
    from queue_app import app 
ImportError: cannot import name 'app' 

什麼我需要做的是能夠得到從updater.py在app.config,避免了「應用程序上下文錯誤的工作之外「如果從APScheduler跑出來?

+0

您可以嘗試在updater.py相對進口 – Stanton

+0

同樣的錯誤(例如,從進口的應用程序。): '回溯(最近通話最後一個): 文件「app.py」,1號線,在 從queue_app導入應用 文件 「/Users/name/queue/queue_app/__init__.py」,3號線,在 從queue_app.updater進口update_printer 文件 「/Users/name/queue/queue_app/updater.py」,3號線,在 從。導入應用程序 ImportError:無法導入名稱'app' ' – DeadCake

+0

哦..你有一個循環引用... app.py - > __ init __。py-> updater.py - > __ init__.py – Stanton

回答

1

這是一個循環依賴關係,因爲您在__init__.py文件中導入了updater。在我的Flask設置中,appapp.py中創建。

相關問題