详解python命令提示符窗口下如何运行python脚本


Posted in Python onSeptember 11, 2020

以arcgispro的python脚本为例在arcgispro自带的python窗口下运行python脚本

需求:

将arcgispro的.aprx项目包中gdb的数据源路径更换为sde数据源路径。

示例数据:testaprx_3water.rar

演示过程:

方式一:脚本中指定好相关参数设置

详解python命令提示符窗口下如何运行python脚本

import arcpy
import json
import sys
import os
import argparse
import re

result = ""
jsontext = {'success': {}, 'msg': ''}


def checkSavedAprxDatasource(output_aprx_path, mapName, targetDb):
  check_result = True
  desc = arcpy.Describe(targetDb)

  saved_aprx = arcpy.mp.ArcGISProject(output_aprx_path)
  for saved_map in saved_aprx.listMaps():
    if saved_map.name == mapName:
      for lyr in saved_map.listLayers():
        if lyr.isFeatureLayer:
          # print(lyr.connectionProperties)
          if lyr.connectionProperties['workspace_factory'].upper() == 'SDE'.upper(
          ) and lyr.connectionProperties['connection_info']['instance'] == desc.connectionProperties.instance:
            pass
          else:
            check_result = False

  return check_result


if __name__ == '__main__':
  try:

    # linux
    # aprxPath = str(sys.argv[1])
    # mapName = str(sys.argv[2])
    # sourceDb = str(sys.argv[3])
    # targetDb = str(sys.argv[4])
    # output_aprx_path = str(sys.argv[5])

    # local pc
    aprxPath = r'D:\rvt\testaprx\testaprx.aprx'
    mapName = 'Map'
    sourceDb = r'D:\rvt\testaprx\Data.gdb'
    targetDb = r'D:\rvt\testaprx\testsde.sde'
    output_aprx_path = r'D:\rvt\testaprx\output\export5.aprx'

    aprx = arcpy.mp.ArcGISProject(aprxPath)
    for m in aprx.listMaps():
      if m.name == mapName:
        m.updateConnectionProperties(sourceDb, targetDb)

    if os.path.exists(output_aprx_path):
      os.remove(output_aprx_path)
    aprx.saveACopy(output_aprx_path)

    checkResult = checkSavedAprxDatasource(
      output_aprx_path, mapName, targetDb)
    if checkResult:
      jsontext['success'] = True
      result = json.dumps(jsontext)
      sys.stdout.write(result)
    else:
      jsontext['success'] = False
      jsontext['msg'] = 'Failed to replace data source'
      result = json.dumps(jsontext)
      sys.stdout.write(result)

  except Exception as e:
    jsontext['success'] = False
    jsontext['msg'] = e.args
    result = json.dumps(jsontext)
    sys.stdout.write(result)

方式二:使用sys.argv[ ]的形式设置相关参数

(arcgispro-py3) D:\rvt\testaprx>python test.py D:\rvt\testaprx\testaprx.aprx Map D:\rvt\testaprx\Data.gdb D:\rvt\testaprx\testsde.sde D:\rvt\testaprx\output\export5.aprx

详解python命令提示符窗口下如何运行python脚本

import arcpy
import json
import sys
import os
import argparse
import re

result = ""
jsontext = {'success': {}, 'msg': ''}


def checkSavedAprxDatasource(output_aprx_path, mapName, targetDb):
  check_result = True
  desc = arcpy.Describe(targetDb)


  saved_aprx = arcpy.mp.ArcGISProject(output_aprx_path)
  for saved_map in saved_aprx.listMaps():
    if saved_map.name == mapName:
      for lyr in saved_map.listLayers():
        if lyr.isFeatureLayer:
          # print(lyr.connectionProperties)
          if lyr.connectionProperties['workspace_factory'].upper() == 'SDE'.upper(
          ) and lyr.connectionProperties['connection_info']['instance'] == desc.connectionProperties.instance:
            pass
          else:
            check_result = False

  return check_result


if __name__ == '__main__':
  try:

    # linux
    aprxPath = str(sys.argv[1])
    mapName = str(sys.argv[2])
    sourceDb = str(sys.argv[3])
    targetDb = str(sys.argv[4])
    output_aprx_path = str(sys.argv[5])
    print("aprx路径: "+aprxPath)
    print("地图视图的名称: "+mapName)
    print("当前的数据源路径: "+sourceDb)
    print("目标数据源路径: "+targetDb)
    print("aprx另存为路径: "+output_aprx_path)

    # local pc
    # aprxPath = r'D:\rvt\testaprx\testaprx.aprx'
    # mapName = 'Map'
    # sourceDb = r'D:\rvt\testaprx\Data.gdb'
    # targetDb = r'D:\rvt\testaprx\testsde.sde'
    # output_aprx_path = r'D:\rvt\testaprx\output\export5.aprx'

    aprx = arcpy.mp.ArcGISProject(aprxPath)
    for m in aprx.listMaps():
      if m.name == mapName:
        m.updateConnectionProperties(sourceDb, targetDb)

    if os.path.exists(output_aprx_path):
      os.remove(output_aprx_path)
    aprx.saveACopy(output_aprx_path)

    checkResult = checkSavedAprxDatasource(
      output_aprx_path, mapName, targetDb)
    if checkResult:
      jsontext['success'] = True
      result = json.dumps(jsontext)
      sys.stdout.write(result)
    else:
      jsontext['success'] = False
      jsontext['msg'] = 'Failed to replace data source'
      result = json.dumps(jsontext)
      sys.stdout.write(result)

  except Exception as e:
    jsontext['success'] = False
    jsontext['msg'] = e.args
    result = json.dumps(jsontext)
    sys.stdout.write(result)

到此这篇关于详解python命令提示符窗口下如何运行python脚本的文章就介绍到这了,更多相关python命令运行python脚本内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单的抓取淘宝图片的Python爬虫
Dec 25 Python
Python修改MP3文件的方法
Jun 15 Python
Python 专题四 文件基础知识
Mar 20 Python
Python基础之getpass模块详细介绍
Aug 10 Python
使用python socket分发大文件的实现方法
Jul 08 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
Python如何转换字符串大小写
Jun 04 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
Python 可迭代对象 iterable的具体使用
Aug 07 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 Python
python实现邮件循环自动发件功能
Sep 11 #Python
Python 实现微信自动回复的方法
Sep 11 #Python
python 如何调用远程接口
Sep 11 #Python
Visual Studio code 配置Python开发环境
Sep 11 #Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 #Python
python如何实现图片压缩
Sep 11 #Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 #Python
You might like
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
基于initPHP的框架介绍
2013/04/18 PHP
php常用ODBC函数集(详细)
2013/06/24 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
JS中的多态实例详解
2017/10/15 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
Python中new方法的详解
2019/01/15 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
学生党员公开承诺书
2014/05/28 职场文书
2015年公务员工作总结
2015/04/24 职场文书
运动会通讯稿600字
2015/07/20 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
分享几个实用的CSS代码块
2022/06/10 HTML / CSS