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

如何在Python脚本中接收参数并传递给Perl脚本rtpc.pl?

Python调用Perl脚本并传递命令行参数

问题背景

原本通过命令行执行perl rtpc.pl [ARG1] [ARG2]运行Perl脚本rtpc.pl,现需编写Python脚本,运行该Python脚本时从命令行输入两个参数,由Python脚本调用rtpc.pl并传递这两个参数。当前已使用subprocess模块,代码为pipe = subprocess.Popen(["perl", "rtpc.pl"], stdout=subprocess.PIPE),但不清楚如何传递参数,使用的shell为tcsh。

解决方案

1. 获取Python脚本的命令行参数

使用sys.argv获取Python脚本运行时传入的参数:

  • sys.argv[0]是Python脚本本身的文件名
  • sys.argv[1]和sys.argv[2]就是需要传递给Perl脚本的两个参数

2. 传递参数给subprocess.Popen

直接将参数追加到subprocess.Popen的命令列表中即可,无需额外处理shell转义。

完整代码示例

import subprocess
import sys

# 校验参数数量
if len(sys.argv) != 3:
    print("用法错误:请传入两个参数,格式为 python your_script.py ARG1 ARG2")
    sys.exit(1)

# 提取要传递的参数
arg1 = sys.argv[1]
arg2 = sys.argv[2]

# 调用Perl脚本并传递参数
pipe = subprocess.Popen(
    ["perl", "rtpc.pl", arg1, arg2],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True  # 使输出以字符串形式返回,简化处理
)

# 获取脚本执行结果
stdout, stderr = pipe.communicate()

# 输出结果
print("Perl脚本执行输出:")
print(stdout)

if stderr:
    print("\n执行错误信息:")
    print(stderr)

注意事项

  • 无需设置shell=True:列表形式传递命令和参数更安全,能自动处理带空格的参数,同时在tcsh环境下可正常运行
  • text=True参数(Python 3.7+可用):替代universal_newlines=True,让stdout/stderr直接返回字符串,无需手动解码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:48:15