当前位置: 首页 > news >正文

在VSCode中运行Python脚本文件时如何传参

以下实验所处的操作系统环境说明:

OS版本
MacOSMonterey 12.1
VSCodeOctober 2023 (version 1.84.2)

一、背景

在 VSCode 中写好 Python 脚本后,如果要运行起来,可以怎么做呢?

一般有以下几种方式:

1、直接在 VSCode 中导航至需要运行的 Python 脚本下,运行该脚本:

  • 方法 1:
    点击左上角处运行按钮(三角箭头图标方向朝右);
    在这里插入图片描述
  • 方法 2:
    在这里插入图片描述

2、在终端(如 Terminal)中运行。
可以方便的找到其存储路径,并打开 Terminal 等软件将其运行起来。
python3 test_pass_params.py

二、问题

其中第 1种方式,在 Python 脚本不传参时还可以,倘若脚本需要外部传参,如:

  • KV 型参数:python3 test_pass_params.py -d db_ecommerce -t ads_trade_stats
  • 仅V型参数: python3 test_pass_params.py ${pamam-1} ${pamam-2} ...

则行不通了。

那么如果想在VSCode中运行Python脚本文件时进行传参,又该如何实现呢?

三、解决方案

尝试方案1(Test Fail):

选择VSCode中左侧竖排第四个 Debug 按钮,如果是首次在软件中运行 Python 程序,则在运行和调试单元框里很可能看到的提示是如下这样的。
在这里插入图片描述
我根据提示, 依次点击超链接 1打开待运行 Python 脚本,之后点击超链接 2打开其所在的文件夹。第3 步在很多PC 上会显示“创建一个launch.json文件”的提示,很可惜在我的 PC 上json 字符所在位置不仅不是超链接,而且显示的是翻译过来的“启动.json”字符。

我随后在 Python 脚本所在的目录中创建了这个 launch.json,并附上如下内容:

launch.json 代码清单:

{"window.zoomLevel": 1,"launch": {"configurations": [{"name": "${workspace}/main.py", 	#调试列表里显示的名字,随意,建议写当前调试的文件名"type": "python",					#语言类型,默认是 Python"request": "launch",				#应答类型, 默认即可"python": "/Library/Frameworks/Python.framework/Versions/3.9/bin/python3",	#Python 可执行文件所在的位置"args": ["-d", "db_ecommerce", "-t", "ads_trade_stats"],								#执行脚本的附加参数,默认生成是没有的"program": "${file}",				#变量,自动取当前光标所在的文件"console": "integratedTerminal",	#显示控制台,默认用 VScode 自带的,也可以用系统的"justMyCode": true, 				#true 只调试当前 py 文件,默认值; false 也调试引用的模块"env": {"PYTHONPATH": "/Library/Frameworks/Python.framework/Versions/3.9/lib/"}	#Python环境变量}]}
}

操作完毕后,通过如下方式运行该Python 脚本文件:

①、VSCode右上角点击“运行”图标
选择:

  • 在专用终端中运行 Python 文件
  • 调试 Python 文件
    在这里插入图片描述
    ②、在菜单“运行”选项中操作
    选择:
  • 启动调试
  • 以非调试模式运行
    在这里插入图片描述
    这 2 种方式,均没有获取到传入的参数,测试以失败告终。

经测试,将 launch.json更名为启动.json,同样失败。

尝试方案2(Test Succ):

选择菜单“运行” --> “添加配置”:
在这里插入图片描述
选择之后,在新生成的 settings.json 文件的生成模板中却不到 Python 相关的配置选项,没关系, 将上述 launch.json 中的文本内容,复制到这里即可。

通过这种方式生成的 settings.json 文件在我 PC 上的位置为:
/Users/xxxx/Library/Application Support/Code/User/settings.json

在这里插入图片描述

settings.json 代码清单:

{"window.zoomLevel": 1,"launch": {"configurations": [{"name": "${workspace}/main.py","type": "python","request": "launch","python": "/Library/Frameworks/Python.framework/Versions/3.9/bin/python3","args": ["-d", "db_ecommerce", "-t", "ads_trade_stats"],"program": "${file}","console": "integratedTerminal","env": {"PYTHONPATH": "/Library/Frameworks/Python.framework/Versions/3.9/lib/"}}]}
}

配置后,记得保存。

之后再次按照如下这种方式运行该 Python 脚本,即可正确获取到请求入参。

  • “尝试方案1(Test Fail)”–> “②、在菜单“运行”选项中操作”

注意:
经测试,如下方式不会引用到settings.json脚本中配置的python 请求入参配置参数(即 “args” 中内容)。

  • “尝试方案1(Test Fail)”–> “①、VSCode右上角点击“运行”图标”

调试时的打印语句,也正常输出了:

# xxxx @ XXXXdeMacBook-Pro in ~/bin [11:28:39] 
$  cd /Users/xxxx/bin ; /usr/bin/env /Library/Frameworks/Python.framework/Versions/3.9/bin/python3 /Users/xxxx/.vscode/extensions/ms-python.python-2023.20.0/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher 59555 -- /Users/xxxx/bin/test_pass_params.py -d db_ecommerce -t ads_trade_stats 
>>>>target_database = db_ecommerce, target_table = ads_trade_stats
>>>> <mysql.connector.connection.MySQLConnection object at 0x10489f250>
>>>>fetchall = [('dt', 'date'), ('recent_days', 'bigint'), ('order_total_amount', 'decimal'), ('order_count', 'bigint'), ('order_user_count', 'bigint'), ('order_refund_count', 'bigint'), ('order_refund_user_count', 'bigint')]
>>>>list(iterator) =  ['dt', 'recent_days', 'order_total_amount', 'order_count', 'order_user_count', 'order_refund_count', 'order_refund_user_count']

一些注意事项:

  1. setting.json中“args”请求参数如果这样配置:
"args": ["-d db_ecommerce", "-t ads_trade_stats"]

在运行时,也可以获取到参数,不过每一个参数前都会添加一个空格,如“ db_ecommerce”、“ ads_trade_stats”.
故推荐“args”中的 k、v 都使用"" 进行包裹,详见setting.json全局配置脚本中的配置。


参考文献:

  • Python debugging in VS Code

相关文章:

  • 用Rust刷LeetCode之66 加一
  • 2分钟带你了解什么是Vsync
  • Java爬虫攻略:应对JavaScript登录表单
  • Apache Hive(部署+SQL+FineBI构建展示)
  • Ribbon组件的负载均衡原理
  • 电脑搜不自己的手机热点,其余热点均可!
  • 采样率越高噪声越大?
  • 【redis笔记】分布式锁
  • 【Lidar】基于Python的三维点云数据转二维平面+散点图绘制
  • 2次MD5加密——用于分布式对话
  • Labelme2Yolo labelme格式的json标注转yolo格式txt
  • 【尘缘送书第五期】Java程序员:学习与使用多线程
  • 排序:直接选择排序
  • 分享几种 Java8 中通过 Stream 对列表进行去重的方法
  • 论文精读 MOG2 阴影检测
  • 分享一款快速APP功能测试工具
  • dva中组件的懒加载
  • Python语法速览与机器学习开发环境搭建
  • Spring Boot快速入门(一):Hello Spring Boot
  • Swoft 源码剖析 - 代码自动更新机制
  • Twitter赢在开放,三年创造奇迹
  • Unix命令
  • V4L2视频输入框架概述
  • 测试如何在敏捷团队中工作?
  • 代理模式
  • 欢迎参加第二届中国游戏开发者大会
  • 两列自适应布局方案整理
  • 如何实现 font-size 的响应式
  • 思考 CSS 架构
  • 一道闭包题引发的思考
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #每天一道面试题# 什么是MySQL的回表查询
  • $.ajax中的eval及dataType
  • (145)光线追踪距离场柔和阴影
  • (安卓)跳转应用市场APP详情页的方式
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • ./configure、make、make install 命令
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core Swagger 过滤部分Api
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET gRPC 和RESTful简单对比
  • .NET MVC第三章、三种传值方式
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .py文件应该怎样打开?
  • .stream().map与.stream().flatMap的使用
  • @Bean有哪些属性
  • [ linux ] linux 命令英文全称及解释
  • [ Linux Audio 篇 ] 音频开发入门基础知识