python調用shell腳本:OSError: [Errno 8] Exec format error


最近在公司項目中遇到一個腳本調用問題,有個python的命令行工具使用subprocess模塊啟動了一個zookeeper的shell腳本,在執行過程中報了一個錯:OSError: [Errno 8] Exec format error,如下圖:

 

 

此時我嘗試在命令行執行紅框中的shell腳本:執行成功,說明不是shell腳本的問題。

 

 

然后,我懷疑是python的權限有問題,網上查了下,說是要加上python解釋器(#!/usr/env/python),於是我就檢查了下對應的python文件內容:確認已包含#!/usr/env/python

 

接着我又擔心是執行權限的問題於是修改了python和shell腳本的可執行權限:但是還是沒有解決問題

chmod +x XXX.py
chmod +x /etc/init.d/zookeeper

 

最后,我懷疑是shell腳本的解釋器有問題,此時我打開shell腳本(/etc/init.d/zookeeper),發現最上面沒有#!/bin/sh

 

 

 

我們知道,shell腳本有兩種執行方式:

1. sh XXX.sh

2. chmod +XXX.sh; ./XXX.sh

對於第二種運行方式,腳本里面必須包含shell解釋器。

如下圖,我添加了shell解釋器(#!/bin/sh)后,python腳本調用shell腳本不報錯了。

 

 至此問題得到了解決。

 

總結本次調試過程,一共分為三步

1.手動執行shell腳本:看腳本是否本身運行就有問題,先不考慮python調用shell的問題。

2.檢查可執行權限:shell和python腳本均要保證該用戶有可執行權限,不放心的話,就chmod +x 對應的腳本。

3.檢查腳本的解釋器:因為腳本是解釋型語言(需要指定解釋器才能逐行執行),不是編譯型語言(編譯好之后不需要逐行翻譯解釋),如果沒有解釋器很可能會導致腳本不可執行。

 

博主:測試生財(一個不為996而996的測開碼農)

座右銘:專注測試開發與自動化運維,努力讀書思考寫作,為內卷的人生奠定財務自由。

內容范疇:技術提升,職場雜談,事業發展,閱讀寫作,投資理財,健康人生。

csdn:https://blog.csdn.net/ccgshigao

博客園:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374

微信公眾號:測試生財(定期分享獨家內容和資源)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM