2.1 与命令行相关的Python语言特性
2.1.1 使用sys.argv获取命令行参数
Python中的sys.argv[]是一个从程序外部获取参数的桥梁,可以获取外界调用该命令时的命令行,包括全部的参数。例如:
#!/usr/bin/python3
import sys
args = sys.argv[0:]
print(args)
在Linux中保存文件,并加上执行权限:
chmod +x 01-argv.py
执行结果如下:
root@liu-ubuntu:~# ./01-argv.py aaa bb c
['./01-argv.py', 'aaa', 'bb', 'c']
命令行的每个部分被argv传递给程序内部,包括命令本身以及参数。
如果在Windows系统中调用时,要用Python执行py文件:
python 01-argv.py aaa bb c
结果为:
['01-argv.py', 'aaa', 'bb', 'c']
后面课程中,除非特殊提示,所有代码均在Linux系统下运行。
2.1.2 使用sys.stdin和sys.stdout进行标准输入输出
在需要更好的控制输出时,sys.stdout,sys.stdin可以实现。
>>> import sys
>>> sys.stdout.write('hello')
hello5
sys.stdin.readline()会将标准输入全部获取,包括末尾的'\n',因此用len计算长度时是把换行符'\n'算进去了的,但是input()获取输入时返回的结果是不包含末尾的换行符'\n'的。因此如果在平时使用sys.stdin.readline()获取输入的话,不要忘了去掉末尾的换行符,可以用strip()函数sys.stdin.readline().strip('\n')或sys.stdin.readline()[:-1]这两种方法去掉换行。
例如:
#!/usr/bin/python3
import sys
temp = sys.stdin.readline().strip('\n')
if temp:
sys.stdout.write(temp)
sys.stdout.write('====')
结果为:
root@liu-ubuntu:~# ./02-stdinout.py
test
test====root@liu-ubuntu:~#
2.1.3 使用SystemExit异常打印错误信息
sys.exit()始终会抛出一个SystemExit异常。在使用sys.exit()退出程序时,要对这个异常进行处理,可以做一些清理工作。
例如:
#!/usr/bin/python3
import sys
try:
temp = sys.stdin.readline().strip('\n')
if temp:
sys.stdout.write(temp)
sys.stdout.write('====')
else:
sys.exit()
except SystemExit:
print('In except')
在读取输入的时候,直接按回车,则结果如下:
root@liu-ubuntu:~# ./03-sysexit.py
In except
root@liu-ubuntu:~#
2.1.4 使用getpass库读取密码
Python中getpass的作用是输入密码不可见。
例如:
#!/usr/bin/python3
import getpass
name = input('Input name:')
passwd = getpass.getpass('Input password:')
print(name)
print(passwd)
运行结果如下:
root@liu-ubuntu:~# ./04-getpass.py
Input name:liu
Input password:
liu
123456
root@liu-ubuntu:~#
注意输入密码时,光标不会向后移动。