使用sys.args
简单示例
|
1
2
3
4
5
6
7
8
9
10
|
import sys
def test_sys_args():
if len(sys.argv) > 1:
print(len(sys.argv) - 1)
print(sys.argv)
else:
print('无参数输入')
if __name__ == '__main__':
test_sys_args()
|
执行
|
1
|
python test.py a 1 test
|
脚本文件名后面的是需要传递的参数
其它参数在命令行中传入时需要用空格分开
若参数中需要包含“”,则需要使用到转义字符\进行转义
输出结果
3
['test.py', 'a', '1', 'test']
所以在二次开发的仿真脚本中,使用子程序进或命令行运行脚本,且需要使用此种方式进行传参时,需要将变量及其参数一并传递,具体使用方式如下
|
1
2
|
#执行脚本
child_process.exec(command val1=1 val2=2 val3=3)
|
脚本内部
sys.argv[1]输出结果为val1=1
满足脚本对的变量需求,成功将脚本外的参数传递到脚本内
创建独立脚本参数文件
如下所示
node.js后端
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
var fs = require('fs')
fs.writeFile('test.txt', _registerMsg, function (err) {
if (err) {
return console.log(err);
} else {
// 变量文件创建成功后,执行核心计算脚本
exec("abaqus cae nogui=abaqus.py", function (error, stdout, stderr) {
if (stdout.length > 1) {
// 计算成功
console.log('you offer args:', stdout);
} else {
// 计算失败
console.log('you don\'t offer args');
}
if (error) {
console.info('stderr : ' + stderr);
}
})
}
})
|
脚本所需参数已经提前拼接并写入到_registerMsg变量中
python脚本
|
1
2
3
4
|
import io
with io.open("test.txt", encoding='utf-8') as f:
code = f.read()
exec(code)
|
脚本只需打开同目录下的参数文件并执行,即可将参数传递到脚本中
两种方式的优缺点
平常我们在用别人写好的python包的时候,在cmd输入xx -h就能查看到帮助信息,输入xx -p 8080就能把参数传入程序里,看起来非常酷。
本篇就来讲下如何在python代码里加入命令行参数,并且其它功能,能调用这个参数。
Python 中也可以所用 sys 的 sys.argv 来获取命令行参数:
注:sys.argv[0] 表示脚本名。
test.py代码如下
|
1
2
3
4
5
|
# -*- coding: UTF-8 -*-
import sys
print '参数个数为:', len(sys.argv), '个参数。'
print '参数列表:', str(sys.argv)
|
执行以上代码,输出结果为:
$ python test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。
该模块提供了两个方法及一个异常处理(Exception getopt.GetoptError)来解析命令行参数。
getopt.getopt 方法用于解析命令行参数列表,语法格式如下:
|
1
|
getopt.getopt(args, options[, long_options])
|
参数说明:
假定我们创建这样一个脚本,可以通过命令行向脚本文件传递两个文件名,同时我们通过另外一个选项查看脚本的使用。脚本使用方法如下:
|
1
|
$ test.py -i -o
|
test.py 文件代码如下所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# -*- coding: UTF-8 -*-
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print '输入的文件为:', inputfile
print '输出的文件为:', outputfile
if __name__ == "__main__":
main(sys.argv[1:])
|
执行以上代码,输出结果为:
$ python test.py -h
usage: test.py -i <inputfile> -o <outputfile>
$ python test.py -i inputfile -o outputfile
输入的文件为: inputfile
输出的文件为: outputfile
结合selenium测试,比如我想测试chrome浏览器,那就在命令行输入“chrome”参数,想测试firefox浏览器的时候,就在命令行输入“firefox”参数,这样就能灵活切换不同浏览器之间的测试了
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# 保存为run.py
# coding:utf-8
import sys, getopt
from selenium import webdriver
import time
def main(argv):
'''
命令行传参
上海-悠悠博客:https://www.cnblogs.com/yoyoketang/
'''
name = "firefox" # 给个默认值
try:
# 这里的 h 就表示该选项无参数,n:表示 n 选项后需要有参数
opts, args = getopt.getopt(argv, "hn:", ["name="])
except getopt.GetoptError:
print('Error: test_yoyo.py -n <browsername>')
print(' or: test_yoyo.py --name=<browsername>')
sys.exit(2)
for opt, arg in opts:
if opt == "-h":
print('test_yoyo.py -n <browsername>')
print('or: test_yoyo.py --name=<browsername>')
sys.exit()
elif opt in ("-n", "--name"):
name = arg
print('run browser name : %s' % name)
return name
def browser(n=None):
'''
启动浏览器, n是浏览器名称,支持浏览器:chrome ,firefox
上海-悠悠博客:https://www.cnblogs.com/yoyoketang/
'''
if n == None:
name = main(sys.argv[1:])
else:
name = n
if name == "firefox":
print("当前执行浏览器:%s" % name)
return webdriver.Firefox()
elif name == "chrome":
print("当前执行浏览器:%s" % name)
return webdriver.Chrome()
else:
print("支持浏览器:chrome,firefox")
if __name__ == "__main__":
driver = browser()
driver.get("https://www.cnblogs.com/yoyoketang/")
t = driver.title
print(t)
time.sleep(10)
driver.quit()
|
cmd执行情况
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
C:\Users\admin>d:
D:\>cd lianxi
D:\lianxi>python run.py -n chrome
Input name : chrome
当前执行浏览器:chrome
DevTools listening on ws://127.0.0.1:54248/devtools/browser/595fe8cf-524d-4599-9
540-2502f6a6f2ca
上海-悠悠 - 博客园
D:\lianxi>python run.py -n firefox
Input name : firefox
当前执行浏览器:firefox
上海-悠悠 - 博客园
|
备注:python2在cmd执行时,中文会显示乱码,用python3就不会有乱码了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。