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

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

OS 版本
MacOS Monterey 12.1
VSCode October 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 代码清单:

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 代码清单:

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右上角点击"运行"图标"

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

shell 复制代码
# 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"请求参数如果这样配置:
shell 复制代码
"args": [
          "-d db_ecommerce", 
          "-t ads_trade_stats"
        ]

在运行时,也可以获取到参数,不过每一个参数前都会添加一个空格,如" db_ecommerce"、" ads_trade_stats".

故推荐"args"中的 k、v 都使用"" 进行包裹,详见setting.json全局配置脚本中的配置。


参考文献:

相关推荐
学测绘的小杨14 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz31021 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐21 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱1 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海2 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱2 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽2 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码2 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理