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

{
   
    "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全局配置脚本中的配置。


参考文献:

相关推荐

  1. 如何Docker容器启动自动运行脚本

    2023-12-13 19:14:02       17 阅读
  2. Python脚本 -h --help

    2023-12-13 19:14:02       12 阅读
  3. 如何Python执行Shell脚本

    2023-12-13 19:14:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-13 19:14:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-13 19:14:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-13 19:14:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-13 19:14:02       18 阅读

热门阅读

  1. master分支切换到release分支

    2023-12-13 19:14:02       30 阅读
  2. 顺序读写 VS 随机读写磁盘

    2023-12-13 19:14:02       43 阅读
  3. 树摇是什么

    2023-12-13 19:14:02       35 阅读
  4. Unity中Shader语义的理解

    2023-12-13 19:14:02       41 阅读