日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python显示外部命令_Python 执行外部指令

發布時間:2025/5/22 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python显示外部命令_Python 执行外部指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、os.system()

阻塞

屏幕會打印命令的輸出

返回命令結果碼

# -*- encoding=utf-8 -*-

import os

if __name__ == '__main__':

pass

print('開始')

ret1 = os.system('python')

print('ret1:{}'.format(ret1))

ret2 = os.system('java -version')

print('ret2:{}'.format(ret2))

print('結束')

運行

可能有人理解阻塞是因為運行了python,因此我嘗試兩個命令都用java -version

# -*- encoding=utf-8 -*-

import os

if __name__ == '__main__':

pass

print('開始')

ret1 = os.system('java -version')

print('ret1:{}'.format(ret1))

ret2 = os.system('java -version')

print('ret2:{}'.format(ret2))

print('結束')

運行

2、os.popen()

阻塞或不阻塞

屏幕不會打印出命令的輸出

返回文件對象,可用read,readline讀取

不阻塞時:

# -*- encoding=utf-8 -*-

import os

if __name__ == '__main__':

pass

print('開始')

os.popen('python')

ret2 = os.popen('java -version')

print('結束')

運行(程序很快打印開始和結束,就像只用了兩個print語句一樣快)

阻塞時:

# -*- encoding=utf-8 -*-

import os

if __name__ == '__main__':

pass

print('開始')

ret1 = os.popen('python')

print(ret1.read())

ret2 = os.popen('java -version')

print(ret2.read())

print('結束')

運行

3、commands.getstatusoutput

python2.+中使用

需要到linux運行

阻塞或者非阻塞

屏幕不會打印出命令的輸出

非阻塞時

# -*- encoding=utf-8 -*-

import commands

if __name__ == '__main__':

pass

print('開始')

ret1 = commands.getstatusoutput('python')

ret2 = commands.getstatusoutput('java -version')

print('結束')

運行

阻塞時:

#-*- encoding=utf-8 -*-

importcommandsif __name__ == '__main__':pass

print('開始')

ret1= commands.getstatusoutput('python')printret1[0]print ret1[1]print '=============='ret2= commands.getstatusoutput('java -version')printret2[0]print ret2[1]print '=============='

print('結束')

運行

4、subprocess 中Popen

阻塞或非阻塞,同上面一樣,通過是否讀取IO決定是否阻塞

屏幕會打印出命令的輸出

可通過stdout,stderr參數指定輸出或錯誤打印到文件

# -*- encoding=utf-8 -*-

import subprocess

if __name__ == '__main__':

pass

print('開始')

s1 = subprocess.Popen('python')

s1.wait()

s2 = subprocess.Popen('java -version')

s2.wait()

print('結束')

運行

4.1、 輸出到文件

通過文件對象來輸出到文件中

#-*- encoding=utf-8 -*-

importsubprocessif __name__ == '__main__':pass

print('開始')

with open('s1.txt', 'w') as f:

s1= subprocess.Popen('python', stdout=f, ) #指定輸出重定向到文件

s1.wait(10) #超過10秒還沒執行完會拋出異常

with open('s2.txt', 'w') as f:

s2= subprocess.Popen('java -version', stdout=f, stderr=f) #指定輸出和錯誤都重定向到文件

s2.wait()print('結束')

運行后可看到文件已經寫入,屏幕不打印。需要注意是stdout還是stderr。

4.2、捕獲輸出和錯誤

PIPE通過開一個新的管道來接收運行狀態

# -*- encoding=utf-8 -*-

import subprocess

if __name__ == '__main__':

pass

print('開始')

s1 = subprocess.Popen('java -version', stdout=subprocess.PIPE, stderr=subprocess.PIPE)

s1.wait(10) # 超過10秒還沒執行完會拋出異常

print(s1.returncode) # 結果碼

print(s1.poll()) # 已經執行結束返回結果碼,否則返回None

std1 = s1.stdout.read()

print('std_out:{}'.format(std1))

std2 = s1.stderr.read()

print('std_err:{}'.format(std2))

print('結束')

運行

5、subprocess.call

用來替代os.system

阻塞

#-*- encoding=utf-8 -*-

importsubprocessif __name__ == '__main__':pass

print('開始')

s1= subprocess.call('java -version', )print(s1)

s2= subprocess.call('python', )print(s2)

s3= subprocess.call('python', timeout=3) #超時拋出異常

print(s3)print('結束')

6、check_call()和check_output()

都會檢查結果碼,不是0就拋出異常

check_call()返回狀態碼

check_output()返回輸出

#-*- encoding=utf-8 -*-

importsubprocessif __name__ == '__main__':pass

print('開始')

s1= subprocess.check_call('java -version', )print(s1)

s2= subprocess.check_output('java -version', )print(s2)print('結束')

運行

使用上面提到的三個方法:call()、check_call() 和 check_output() 時,盡量不要將參數 stderr 和stdout 設置為 subprocess.PIPE,這幾個函數默認都會等待子進程完成,子進程產生大量的輸出數據如果造成管道堵塞,父進程再等待子進程完成可能造成死鎖。

參考鏈接:

總結

以上是生活随笔為你收集整理的python显示外部命令_Python 执行外部指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。