亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python代碼調(diào)用執(zhí)行shell踩坑解決

 更新時間:2023年06月12日 09:00:51   作者:大話性能  
這篇文章主要為大家介紹了Python代碼調(diào)用執(zhí)行shell,踩過的坑解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

背景

在老家 2 天,花了點時間,折騰了下 python 代碼,之前一直遇到個偶現(xiàn)點問題,這兩天總算解決了。

問題的核心是,你知道怎么正確用 python 代碼調(diào)用 linux 上的 shell 命令。

這里回涉及 2 個問題。

  • 1、如何執(zhí)行本機上的 linux 命令?
  • 2、如何執(zhí)行遠程機器上的 linux 命令?

問題一:

可以執(zhí)行本機 shell 命令的相關(guān) python 模塊和函數(shù)有好幾個,不過有一些已經(jīng)被廢棄或移除。

subprocess 模塊用于創(chuàng)建子進程, 這個模塊用于替換舊版本中的一些模塊, 如:os.system, 

    os.spawn*, os.popen*, os.popen*, popen2., commands., subprocess 允許你能創(chuàng)建很多子進程, 創(chuàng)建的時候能能指定子進程和子進程的輸入、輸出、錯誤輸出管道, 執(zhí)行后能獲取輸出結(jié)果和執(zhí)行狀態(tài)。

在 python3.5 之后的版本中, 官方文檔中提倡通過 subprocess.run() 函數(shù)替代其他函數(shù)來使用 subprocess 模塊的功能。

測試:自己寫了個簡單的 demo,驗證了 subprocess 調(diào)用 run 函數(shù)執(zhí)行 linux 命令的時候是阻塞的,一直會等到命令執(zhí)行完,再往下走。
另外,可以根據(jù)結(jié)果的 returncode 碼,進行判斷,linux 命令有沒有執(zhí)行成功。

問題二:

關(guān)于 python 遠程執(zhí)行 Linux,用的最多的還是 paramiko 模塊,我之前也是用了這個模塊,但是踩坑了。

核心主要代碼

sshclient = paramiko.SSHClient()
        sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshclient.connect(ip, int(port), user, pwd, timeout=60)

check_in, check_out, check_err = sshclient.exec_command(self.check_slave_cmd)

坑就是,exec_command 函數(shù)是非阻塞的,不管命令有沒有執(zhí)行成功,python 代碼就往下走了。所以,有時候回出現(xiàn)偶像的 bug,因為取決于命令執(zhí)行的快慢和網(wǎng)速,譬如,假設(shè)你執(zhí)行的 shell 命令耗時比較久,而代碼已經(jīng)執(zhí)行到下面,發(fā)現(xiàn)沒有你 shell 命令的結(jié)果就報錯了。

解決方法

檢測一下該 shell 命令的執(zhí)行狀態(tài)。調(diào)用 recv_exit_status(),該函數(shù)回一直阻塞中,直到 shell 命令結(jié)束,一般正常接受的 status 是 0.。
所以,當(dāng)你要用到這個 paramiko 模塊執(zhí)行遠程機器的 shell 命令的話,要多個心眼,保證 shell 命令有沒有執(zhí)行完成,會不會影響你的代碼。

以上就是Python 代碼調(diào)用執(zhí)行 shell,踩過的坑的詳細內(nèi)容,更多關(guān)于Python調(diào)用執(zhí)行shell踩坑的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中處理字符串之isalpha()方法的使用

    Python中處理字符串之isalpha()方法的使用

    這篇文章主要介紹了Python中處理字符串之isalpha()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 在Python dataframe中出生日期轉(zhuǎn)化為年齡的實現(xiàn)方法

    在Python dataframe中出生日期轉(zhuǎn)化為年齡的實現(xiàn)方法

    這篇文章主要介紹了在Python dataframe中出生日期轉(zhuǎn)化為年齡的實現(xiàn)方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • NumPy中np.random.rand函數(shù)的實現(xiàn)

    NumPy中np.random.rand函數(shù)的實現(xiàn)

    np.random.rand是NumPy庫中的一個函數(shù),用于生成隨機數(shù),本文主要介紹了NumPy中np.random.rand函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Python使用asyncio包處理并發(fā)的實現(xiàn)代碼

    Python使用asyncio包處理并發(fā)的實現(xiàn)代碼

    這篇文章主要介紹了Python使用asyncio包處理并發(fā),asyncio包使用事件循環(huán)驅(qū)動的協(xié)程實現(xiàn)并發(fā),本文通過實例代碼給大家介紹的非常詳細對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 檢測python爬蟲時是否代理ip偽裝成功的方法

    檢測python爬蟲時是否代理ip偽裝成功的方法

    這篇文章主要介紹了檢測python爬蟲時是否代理ip偽裝成功的方法以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下
    2019-07-07
  • TensorFlow的自動求導(dǎo)原理分析

    TensorFlow的自動求導(dǎo)原理分析

    這篇文章主要介紹了TensorFlow的自動求導(dǎo)原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python中創(chuàng)建二維數(shù)組

    Python中創(chuàng)建二維數(shù)組

    今天小編就為大家分享一篇關(guān)于Python中創(chuàng)建二維數(shù)組,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 對Python捕獲控制臺輸出流的方法詳解

    對Python捕獲控制臺輸出流的方法詳解

    今天小編就為大家分享一篇對Python捕獲控制臺輸出流的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • pygame實現(xiàn)貪吃蛇游戲(上)

    pygame實現(xiàn)貪吃蛇游戲(上)

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 一文帶你深度解密Python的字節(jié)碼

    一文帶你深度解密Python的字節(jié)碼

    當(dāng)我們想要執(zhí)行一個?py?文件的時候,只需要在命令行中輸入?python?xxx.py?即可,但你有沒有想過這背后的流程是怎樣的呢?本文主要賀和大家來聊聊Python中的字節(jié)碼,感興趣的可以了解一下
    2022-12-12

最新評論