python sys庫

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可以讀取多個文件的內容,同時提供一些方法讓我們知道當前所讀取的內容屬於哪一個文件

  1. filename: 當前正在讀取的文件名
  2. fileno: 文件的描述符
  3. filelineno: 正則讀取的行是當前文件的第幾行
  4. isfirstline:正則讀取的文件是否當前文件的第一行;
  5. 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()

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章