python不知道入参出参

Python013

python不知道入参出参,第1张

1.入参出参

语法: in|out|inout 参数名 数据类型 , …

in 定义出参; out 定义入参; inout 定义出参和入参。

2.出参in

使用出参in时,就是需要我们传入参数,在这里可以对参入的参数加以改变。简单来说in只负责传入参数到存储过程中,类似Java中的形参。

Linux的shell中存在一些特殊字符(保留字),我们将这些具有一些特殊功能的字符叫做meta(元字符),还有一些普通的,没有特殊功能的字符我们叫做literal(文字)。bash中,常使用的引用有如下三种方法:

    1、单引号:单引号中的所有meta均被当作普通字符使用。

    2、双引号:在双引号中的大部分meta都被当作普通字符,但某些字符的功能保留(如$)。

    3、反斜线:只有紧接在反斜线(跳脱字符)之后的单一meta才被当作普通字符。

Windows的cmd下,同样也有类似的概念。单引号和双引号有时候没有区别(可以使用任意一个),有时候只能用特定的一个。

这篇文章主要记录python脚本入参带有&&符号时,在Linux和Windows平台的不同表现。

编写python脚本quote.py,内容如下:

$ cat quote.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

print(sys.argv[1])

1、参数不使用引号

$ python quote.py whoami&&whoami

whoami

sunday

可以看出,第一个whoami被当作入参传给脚本,第二个whoami当作bash命令,在终端执行。

2、参数使用单引号

$ python quote.py 'whoami&&whoami'

whoami&&whoami

可以看出,&&被当作普通字符,whoami&&whoami作为参数传给了脚本。

3、参数使用双引号

$ python quote.py "whoami&&whoami"

whoami&&whoami

可以看出,&&被当作普通字符,whoami&&whoami作为参数传给了脚本。

在Windows执行脚本,用户为winsunday:

1、参数不使用引号

C:\test>python quote.py whoami&&whoami

whoami

winsunday

可以看出,第一个whoami被当作入参传给脚本,第二个whoami当作CMD命令,在终端执行。

2、参数使用单引号

C:\test>python quote.py 'whoami&&whoami'

'whoami

'whoami'' 不是内部或外部命令,也不是可运行的程序

或批处理文件。

可以看出,单引号被当作普通字符,&&对命令进行了分割,'whoami作为第一个参数被传给脚本;whoami'被认为是一个命令进行执行(报错了)。

3、参数使用双引号

C:\test>python quote.py "whoami&&whoami"

whoami&&whoami

可以看出,双引号时&&被当作普通字符,whoami&&whoami作为整体被传给脚本。

如果在运行python脚本时需要传入一些参数,可以使用如下两种方式:

sys模块是python常用的一个模块,封装了python解释器相关的数据 . sys.argv 封装了传入的参数数据。

使用 sys.argv 接收上面第一个命令中包含的参数方式

parser.add_argument 方法的 type 参数理论上可以是任何合法的类型, 但有些参数传入格式比较麻烦,例如list,所以一般使用 bool , int , str , float 这些基本类型就行了,更复杂的需求可以通过 str 传入,然后手动解析。 bool 类型的解析比较特殊,传入任何值都会被解析成 True ,传入空值时才为`False

具体请参考API文档: https://docs.python.org/2/library/argparse.html