Python3.7.3与Robot Framework3.1.1命令行传参问题求助
看起来你在命令行参数传递的方式上犯了几个关键错误,导致了报错。咱们一步步来修正:
核心问题分析
你之前的命令行写法完全不对:用|把robot和python命令拼接是管道操作,这会让robot的输出作为python命令的输入,完全不符合你"命令行→Python文件→Robot文件"的传递逻辑。另外,直接在Python文件里用sys.argv读取参数也不行——当Robot Framework加载这个Python变量文件时,sys.argv指向的是robot命令的启动参数(比如-d Report这些),不是你想传递的账号密码。
正确解决方案
步骤1:修改Python变量文件
Robot Framework的Python变量文件支持通过get_variables函数接收命令行传入的参数,我们把你的test.py改成这样:
def get_variables(args): # args是从命令行传递给变量文件的参数列表 username = args[0] password = args[1] environment = args[2] # 返回变量字典,供Robot Framework使用 return { "username": username, "password": password, "environment": environment }
步骤2:使用正确的Robot命令行
用--variablefile(简写-V)参数,在变量文件名后加冒号和逗号分隔的参数,命令如下:
robot -d Report -V "test.py:test@test.com,test@123,QA1" Test_sample.robot
步骤3:保持Robot文件不变
你的Test_sample.robot代码不需要修改,因为我们返回的变量字典里的键正好是你引用的${username}、${password}、${environment}。
为什么之前的命令会报错?
你之前的命令用|拼接两个命令,导致Robot Framework的标准输出被重定向到Python命令的标准输入,当Python命令执行结束后,管道被关闭,Robot Framework再尝试写入标准输出时就触发了OSError: [Errno 22] Invalid argument这个错误——这完全是命令行写法错误导致的,和变量传递逻辑无关。
验证结果
运行正确的命令后,你会看到预期的输出:
The usr is: test@test.com The pwd is: test@123 The env is: QA1
内容的提问来源于stack exchange,提问作者Learner

