python sys庫
argv
sys庫下有一個名爲argv的列表,該列表保存了所有的命令行參數。argv列表中的第一個元素是命令行程序的名稱,其餘的命令行參數以字符串的形式保存在該列表中。
# 程序名test.py
from __future__ import print_function
import sys
print(sys.argv)
#執行命令
python test.py localhost 3306
['dddddd.py', 'localhost', '3306']
import sys
import os
def main():
# sys.argv.append(" ")
filename = sys.argv[0]
print(filename)
#D:/project/bianzu/sys_test.py
print("打印參數列表:",sys.argv)
#['D:/project/bianzu/sys_test.py']
if not os.path.isfile(filename):
raise SystemExit(filename + ' does not exists')
elif not os.access(filename,os.R_OK):
raise SystemExit(filename + ' is not accessible')
else:
print(filename + " is accessible")
if __name__ == '__main__':
main()
sys文件描述符
sys庫中有三個文件描述符,分別是stdin、stdout和stderr,這三個文件描述符分表代表着標準輸入、標準輸出和錯誤輸出。
讀取標準輸入:sys.stdin
sys.stdin從標準輸入中讀取內容,然後打印到命令行終端
import sys
for line in sys.stdin:
# end= "" 不換行
print(line,end=" ")
sys.stdin.readlines函數將標準輸入的內容讀取到一個列表中
import sys
def get_content():
return sys.stdin.readlines()
print(get_content())
多文件處理fileinput
fileinput是python語言的標準庫,提供了比sys.stdin更加通用的功能,使用fileinput可以依次讀取命令行參數中給出的多個文件。fileinput會遍歷sys.argv[1:]列表,並按行一次讀取列表中的文件。如果該列表爲空,則fileinput默認讀取標準輸入中的內容
import fileinput
for line in fileinput.input():
print(line,end="")
filename可以讀取多個文件的內容,同時提供一些方法讓我們知道當前所讀取的內容屬於哪一個文件
- filename: 當前正在讀取的文件名
- fileno: 文件的描述符
- filelineno: 正則讀取的行是當前文件的第幾行
- isfirstline:正則讀取的文件是否當前文件的第一行;
- isstdin fileinput: 正則讀取文件還是直接從標準輸入讀取內容
import fileinput
for line in fileinput.input():
meta = [fileinput.filename(),fileinput.fileno(),fileinput.filelineno(),fileinput.isfirstline(),fileinput.isstdin()]
print(*meta)
#依次是文件名 文件描述符 文件第幾行 是否是第一行 是否從標準輸入讀取
#D:\tmp\test2.txt 3 1 True False
#hi,happy everyday
#
print(line)
標準輸出:sys.stdout
sys.stdout與sys.stderr向標準輸出和錯誤輸出中輸出內容,默認情況向“hello" 和”world"都會被輸出到命令行,可以通過重定向來將"hello"輸出到標準輸出,“world"被輸出到錯誤輸出
import sys
sys.stdout.write("hello")
sys.stderr.write('world')
Python程序執行失敗,需要在標準錯誤中輸出錯誤信息,然後以非零的返回碼退出程序
import sys
sys.stderr.write('error message')
sys.exit(1)
示例:
import sys
import os
def main():
filename = sys.argv[1]
print(filename)
#判斷文件是否存在,不存在直接退出
if not os.path.isfile(filename):
raise SystemExit(filename + ' does not exists')
# 判斷文件是否具有讀權限
elif not os.access(filename,os.R_OK):
os.chmod(filename, 777)
else:
with open(filename) as f:
print(f.read())
if __name__ == "__main__":
main()