如何在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
相关产品推荐
相关产品推荐

