You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl调用Python时如何将数组作为参数传递给Python函数

解决方案

核心问题说明

你当前的写法存在两处核心问题:

  • Perl侧直接传递数组到命令行时,Python侧需要通过标准库的sys.argv接收所有命令行参数,而非直接注入自定义test函数的入参
  • 现有Python脚本没有入口逻辑读取命令行参数,也没有主动调用test函数,自然无法正确拿到数组

修正方案

1. Perl侧代码调整

优先使用多参数形式的system调用,会自动处理参数转义,避免带空格、特殊符号的参数被错误拆分:

my @stmts = ("cd /tmp", "touch test.txt");
# 多参数调用自动处理转义,不需要手动拼接字符串
system('python.exe test.py', @stmts);

如果必须用字符串拼接形式调用,可以用quotemeta处理每个参数避免解析错误:

my $cmd = 'python.exe test.py ' . join(' ', map { quotemeta } @stmts);
system($cmd);

2. Python侧代码调整

sys.argv本身就是列表类型,第一个元素是当前脚本名,从第二个元素开始就是Perl传递过来的数组内容:

import sys

def test(stmts):
    # 原写法字符串拼接存在语法错误,这里用f-string格式化输出
    print(f"Statements: {stmts}")
    # 遍历数组元素示例
    for index, stmt in enumerate(stmts):
        print(f"第{index+1}条语句:{stmt}")

if __name__ == '__main__':
    # 去掉第一个元素(脚本名),剩下的就是传入的数组
    stmts = sys.argv[1:]
    test(stmts)

运行效果

执行Perl脚本后,Python输出如下:

Statements: ['cd /tmp', 'touch test.txt']
第1条语句:cd /tmp
第2条语句:touch test.txt

内容的提问来源于stack exchange,提问作者ssr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:24:01