使用ArcGIS和Arcpy的Flask应用程序无法运行

38

我有一个从MSSQL数据库中获取表格并在ArcGIS中注册的脚本,同时使用了其他几种arcpy方法。我试图将其与Flask组合,并开发出一个HTML界面,您可以在其中指定表格。该脚本在控制台上运行得非常好,但是当在http://127.0.0.1:5000/上使用Flask运行时,arcpy函数不会运行,然后应用程序会抛出错误。

我正在使用我的本地python目录,因此在flask上导入arcpy没有任何问题。所以,我能够使用pymssql函数创建新表格,但是当涉及到arcpy函数时,它会抛出不存在的错误,尽管表格存在。我觉得在Flask中运行arcpy出了问题,但是任何帮助都将不胜感激。

(2) 我在Django中尝试了同样的事情,但遇到了同样的问题。

谢谢

forms.py

class createGISLayer(FlaskForm):
    tCreateLayer = SubmitField('Create GIS Layer')

仪表板主函数()

   try:
        cursor.execute(QueryCreate)
        print ("Table Created.")
        print(self.dbTablePath)
        descTable = arcpy.Describe(self.dbTablePath)

    except arcpy.ExecuteError:
        print(arcpy.GetMessages())

app.py

if formCreate.tCreateLayer.data and formCreate.validate_on_submit():
    if myLayer is not None:
        try:
            print("Create GIS Layer")
            myLayer.dashboardMain()
            flash('GIS Layer created!', 'success')

        except Exception as e:
            print(e.message)
            flash(e.message, 'danger')

首页文件

<!-- Create GIS Layer  -->
<div class="content-section">
<form name='idCreateGISLayer' action="" method="POST">
<table style="height: auto; margin-left: auto; margin-right: auto; width: 600px;">
<tbody>
<tr>
    {{ formCreate.hidden_tag() }}
    <td style="height: 39px; width: 259px">
        <h2 style="text-align: left;"><font size="3"><strong>(2) Create </strong></font></h2>
    </td>
    <td style="text-align: left; height: 39px;">
        <div class="auto-style2">                                                                
            {{ formCreate.tCreateLayer(class="btn btn-outline-info")}}
        </div>
    </td>
 </tr>
 </tbody>
 </table>
 </form>
 </div>

错误

Table Created.
F:\Projects\Dashboard\Publish.sde\Publish.dbo.A_WebT1
"F:\Projects\Dashboard\Publish.sde\Publish.dbo.A_WebT1" does not exist

屏幕截图

表格已存在


你能检查一下Python是否可以使用pathlib访问文件吗?from pathlib import Path dbTablePath = ... # 列出目录中的所有文件 p = Path(dbTablePath) for f in p.iterdir(): print(f) # 或者 for f in p.parent.iterdir(): print(f) - Leon Klute
3个回答

1
据我所知,ArcGIS维护着自己的Python环境(并且过去会在现有安装上进行安装,令人讨厌)。因此,除非您在启动/运行Flask时使用该环境,否则您可能无法加载所需的配置/资源以支持Arcpy函数。这就像尝试加载安装在不同Python虚拟环境中的库一样。您可以提供路径,但如果它需要来自自己的虚拟环境的任何其他内容或配置,则无法正常工作。

-1

我没有调用这个函数,而是在DOS下运行了我的脚本。

@app.route('/cad2json', methods=['POST'])
def cad2sde():
    dwg_path = request.form.get('dwg_path')
    reference_scale = request.form.get('reference_scale')
    spatial_reference = request.form.get('spatial_reference')
    target_layer = request.form.get('target_layer')
    sentence =   (u'C:\\Python27\\ArcGIS10.1\\python.exe C:\\Users\\Administrator           \\Desktop\\flask\\cad.py %s %s %s %s'
             %(dwg_path,reference_scale,spatial_reference,target_layer))
    p = os.popen(sentence)
    return format(p.read())

1
你需要描述你的答案如何符合手头的要求。 - NitinSingh
1
在这种情况下,.py文件应该位于python.exe相同的目录下。不幸的是,您也无法跟踪任何错误。我一直在寻找解决方案。这可能与路径有关。 - Efkan

-3

ArcPy不是免费的。它只能在ESRI软件或anaconda中使用。你无法导入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接