日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一,os.system()

這種方式雖然可以在控制臺看到回顯的結果,但是卻無法接收到這些內容,更無法對結果進行處理

官方文檔對返回結果說明如下

在windows上,返回值是運行命令后系統外殼程序返回的值。…通常是cmd.exe,它返回命令運行的退出狀態;

即os.system()返回值是命令執行后退出的狀態,正常為0,異常為1

正常情況

In[5]: os.system("dir")
 Volume in drive F is 數據
 Volume Serial Number is 0006-F904

 Directory of F:PracticePycharmProjectsPythonBasic

2019/04/29  10:17    <DIR>          .
2019/04/29  10:17    <DIR>          ..
2019/04/29  11:45    <DIR>          .idea
2019/03/31  21:36    <DIR>          venv
2019/03/31  21:35    <DIR>          _01_HelloWorld
2019/03/31  21:36    <DIR>          _02_數據類型
...(略)
               0 File(s)              0 bytes
              15 Dir(s)  41,743,155,200 bytes free
Out[5]: 0

注意末尾的Out [5]:0,這才是真正的返回值

異常情況

In[6]: os.system("directory")
'directory' is not recognized as an internal or external command,
operable program or batch file.
Out[6]: 1

Out [6]:1,表示執行出現異常

二,os.popen()

具體用法如下:

result = os.popen('ipconfig')
# 返回的結果是一個<class 'os._wrap_close'>對象,需要讀取后才能處理
context = result.read()
for line in context.splitlines():
    print(line)
result.close()

os.popen()的返回值是一個類_wrap_close,需要重定向read()之后才能得到一個str

官方文檔對返回值說明:

打開到命令cmd或來自命令cmd的管道。返回值是連接到管道的打開文件對象,可以根據模式是“ r”(默認)還是“ w” 來進行讀取或寫入。

從命令cmd:一個管道,返回值是連接管道的文件對象,通過該對象可以進行讀或寫。

三,commands.getstatusoutput()

特別說明:commands模塊已經被廢棄,并且3.x中已經被刪除,這里不做過多說明用法如下:

output = commands.getstatusoutput('ipconfig')  
print  output

四,subprocess.Popen()

從的python2.4版本開始,可以用子這個模塊來產生子進程,并連接到子進程的標準輸入/輸出/錯誤中去,還可以得到子進程的返回值。子意在替代其他幾個老的模塊或函數,例如:os.system,os.spawn *,os.popen *,popen2。,命令。subprocess模塊??可用于執行復雜的系統命令,包括os.popen()不適用的交互模式的場景,例如python

相互場景

import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print('hello world')")
obj.stdin.write("n")
obj.stdin.write("print('hello python')")
obj.stdin.close()

cmd_out = obj.stdout.read()
obj.stdout.close()
cmd_error = obj.stderr.read()
obj.stderr.close()

print(cmd_out)
print(cmd_error)  # 程序沒有異常,只輸出空行

執行結果:

hello world
hello python

非共有場景

p = subprocess.Popen('ipconfig', shell=True, stdout=subprocess.PIPE)
out, err = p.communicate()
for line in out.splitlines():
    print(line.decode("gbk", "ignore"))

注:如果子進程輸出到數據到stdout或stderr的管道,并達到了系統pipe的緩存大小的話,子進程會等待父進程轉換管道,而父進程此時正wait著著話,將會產生傳說中的死鎖。建議使用communication()來避免這種情況的發生。

Popen.communicate(input = None)和子進程交互:發送數據到stdin,并從stdout和stderr讀數據,直到收到EOF。等待子進程結束。可選的輸入如有有話,要為字符串類型。此函數返回一個元組:(stdoutdata,stderrdata),元素類型為<class'bytes'>,需要進行轉碼,上面的代碼——line.decode(“ gbk”,“ ignore”)

實踐案例下面的演示根據系統命令config,獲取本機mac地址和IP地址的代碼以網上的代碼為基礎修改

def get_mac_and_ip():
    """
    # 獲取本機MAC地址和IP地址
    :return: (MAC地址,IP地址)
    """

    # 使用with,不需要顯式的寫pipe.close()
    with os.popen('ipconfig -all') as pipe:
        str_config = pipe.read()
        # print("完整配置信息:", str_config)
        # 利用正則表達式和re模塊檢索結果
        mac_re_compile = re.compile(r"物理地址[. ]+: ([w-]+)")
        ip_re_compile = re.compile(r"IPv4 地址[. ]+: ([.d]+)")

        mac = mac_re_compile.findall(str_config)[0]  # 找到MAC
        ip = ip_re_compile.findall(str_config)[0]  # 找到IP

        # print("MAC=%s, IP=%s" % (mac, ip))

    return mac, ip


result = get_mac_and_ip()
print("MAC: %sn IP: %s" % result)

執行結果

MAC: 26-0A-64-A7-68-84
 IP: 192.168.1.103
Python獲取CMD命令行輸出結果

 

MAC: 26-0A-64-A7-68-84
 IP: 192.168.1.103

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定