Python calls shell script: oserror: [errno 8] exec format err

Knowledge map advanced must read: read how large-scale map data efficient storage and retrieval>>>

Recently, we encountered a script call problem in the company project. A python command-line tool started a zookeeper shell script using the subprocess module, and reported an error during execution: oserror: [errno 8] exec format error, as shown in the figure below:

At this point, I try to execute the shell script in the red box on the command line : is executed successfully, indicates that it is not a shell script problem

Then, I suspected that there was a problem with the permission of Python. I checked it online and said that I wanted to add a Python interpreter ( #)/ Usr/env/Python ), so I checked the content of the corresponding Python file: confirm that it contains / usr/env/python


Then I worried about the issue of execution permission , so modified the executable permission of Python and shell scripts: but still did not solve the problem

chmod+xXXX.pychmod+x/etc/init.d/zookeeper

Finally, I suspect that there is something wrong with the shell script interpreter . At this time, I open the shell script (/etc/init. D/zookeeper ) and find that there is no / bin/sh

As we know, shell scripts can be executed in two ways:

1. sh XXX.sh

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

For the second mode of operation, the script must contain a shell interpreter

As shown in the figure below, I added a shell interpreter (#)/ After that, the python script calls the shell script and does not report an error

So far, the problem has been solved

The debugging process is divided into three steps

1. Execute the shell script manually: see if the script itself has problems, and ignore the problem of calling the shell by python

2. Check the executable permissions: both shell and python scripts should ensure that the user has executable permissions. If you don’t feel at ease, use the script corresponding to Chmod + X

3. Check the interpreter of the script: because the script is an interpretive language (you need to specify an interpreter to execute line by line), it is not a compiled language (you don’t need to translate and interpret line by line after compiling). If there is no interpreter, the script may not be executable

Blogger: testing makes money

Motto: test to complete the original accumulation, invest to financial freedom

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

Blog Park: https://www.cnblogs.com/qa-freeroad/

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

In this article, we share the blog “test makes money” (51CTO).

Similar Posts: