发现之前有人写了一个python的脚本使用os.system(cmd)调用shell。 shell异常结束了,os.system(cmd)也返回非0 ,但是python的退出码是0。
示例代码如下:
#run.sh的内容 #这个命令一定会失败的,因为jar的参数不对。 hadoop jar hello
下面是调用这个run.sh的python脚本
#hello.py的内容 import os os.system('sh run.sh')
期望的结果:
运行hello.py ,python内部调用run.sh。由于run.sh里面的hadoop命令失败,sh run.sh会返回非0的错误退出码;然后hello.py会使用这个非零的错误退出码结束程序。
实际的结果:
运行hello.py ,python内部调用run.sh。由于run.sh里面的hadoop命令失败,sh run.sh会返回非0的错误退出码;但是运行python程序hello.py的退出码是0。和预期不符。
问题原因:
原因很简单。看下面的python代码就明白了。
#hello.py的内容 import os import sys exit_code = os.system('sh run.sh') print 'exit_code:%s' % exit_code # 这里返回的是非 0 ,因为run.sh运行出现异常返回的就是非0。 # 加入如下代码,让当前python脚本也使用非0退出 if 0 != exit_code: sys.exit(1)
如上面代码。 exit_code = os.system('sh run.sh') 里面的 exit_code 因为run.sh 返回非0,但是实际上python的这个函数os.system('sh run.sh')运行是成功的,只不过函数的返回值是非0.这里要区分python脚本运行的退出码和os.system(cmd)的返回值不是一回事,需要根据os.system('sh run.sh')的函数返回值来判断如何让python退出。
相关推荐
1. os.system(cmd):执行 shell 命令,返回值是脚本的退出状态码,0 代表成功,1 代表不成功。 2. os.chdir(path):改变目录到指定目录。 七、文件大小相关函数 1. os.path.getsize():获得文件的大小,如果为目录...
`os`模块提供了与操作系统交互的函数,如判断用户权限(通过`os.getuid()`检查是否为root用户),执行系统命令(如`os.system(cmd)`来下载、解压和安装Python)。而`sys`模块则用于处理Python运行时的配置和退出程序...
### 在Python中实现运行多条Shell命令 在Python编程中,有时我们需要调用系统的Shell命令来完成特定的任务,比如文件操作、系统管理等。本文将详细介绍如何在Python中执行多条Shell命令,并探讨不同的实现方法及其...
15. os.system(cmd):利用系统调用,运行cmd命令。 操作举例: os.mkdir('/tmp/xx') os.system("echo 'hello' > /tmp/xx/a.txt") os.listdir('/tmp/xx') os.rename('/tmp/xx/a.txt', '/tmp/xx/b.txt') os.remove('...
这里我们将详细探讨三种在Python中调用CMD命令的方法:`os.system()`,`os.popen()`,以及`subprocess.Popen()`。 1. **`os.system()`** `os.system(command)` 方法是最简单的调用CMD命令的方式。当你调用 `os....
2. os.system()方法:os.system()是一个非常基础的执行命令的方法,它通过Python调用系统shell来运行指定的命令,并且该方法返回值是命令的退出状态码而非命令的输出结果,返回状态码为0表示命令执行成功,非0表示有...
在Python中,`os`模块提供了一系列与操作系统交互的接口,其中包括`system`函数,它允许我们直接执行Shell命令。此方法简单易用,但功能较为有限。 ```python import os # 执行`ls -al`命令并打印状态码 val = os....
- **`os.system`**:这个函数会执行命令并返回命令的退出状态。 #### 2.2 示例代码 ```python import os import commands # 定义命令 cmdstr = 'ipconfig -all' # 使用 commands.getstatusoutput status, output ...
`os.system(cmd)`执行系统命令,如创建文件、移动文件等。 总之,Python的内置模块提供了大量功能,从基本的类型转换和函数调用,到复杂的系统交互和文件操作。理解并熟练使用这些模块,能极大地提升Python开发的...
- **`os.system(cmd)`**:运行 `cmd` 命令。 - **`os.chdir(path)`**:改变当前工作目录到 `path`。 - **`os.mkdir(path)`**:创建一个名为 `path` 的目录。 - **`os.rmdir(path)`**:删除名为 `path` 的空目录...
11. `os.system(cmd)`:执行系统命令,如创建目录、写入文件等。 通过上述介绍,我们可以看到Python内置模块和操作系统相关模块的强大功能。它们使得Python不仅能够处理各种数据类型,还能够方便地与操作系统进行...
`os.system()` 方法用于执行shell命令,并返回一个退出状态码。这个状态码通常为0表示命令执行成功,非0则表示失败。例如,执行`python hello.py`后,输出`hello, world!`,并返回状态码0。 2. os.popen(cmd) `os...
总结,Python在Linux环境下调用Shell命令的方法主要包括`os`模块的`system`、`popen`方法以及`subprocess`模块。具体选择哪种方法取决于你是否需要获取命令的输出、处理错误和控制进程等需求。在Python 3.x中,`...
总结来说,Python提供了多种方式来调用shell命令,如os.system()、os.popen()、commands.getstatusoutput()以及subprocess模块。根据实际需求,可以选择合适的方法。在Python 3.x中,subprocess模块是最推荐的选择,...
- 在Python脚本的末尾增加`os.system("pause")`语句。 - 这样当脚本执行完毕后,会自动暂停,并显示“请按任意键继续...”,等待用户按键后才会退出程序。 - 这对于防止程序执行完毕后命令行窗口一闪而过的情况...
`subprocess`模块是Python 2.4引入的,替代了`os.system`和`os.popen`,提供了更强大、更灵活的子进程控制功能。主要有以下几个常用方法: 2.1. `subprocess.call`和`subprocess.run` 这两个方法执行命令并等待...
例如,你可以用 `os.system('command')` 来运行一个命令,如 `os.system('cat /etc/passwd')`,它会打印出 `/etc/passwd` 文件的内容,并返回命令的退出状态码。退出状态码通常为0表示命令成功执行,非零值表示存在...
- `os.system(cmd)`: 运行系统命令。 **示例**: ```python import sys import os print(sys.argv) print(os.environ["HOME"]) os.chdir('d:\\outlook') print(os.getcwd()) ``` #### 七、内置模块与函数 - **...
crtrl.py监控Apache服务器进程的Python 脚本 ... 2: print “apache 进程异常退出, 4 秒后重新启动” time.sleep(3) os.system(“service apache2 restart”) except: print “Error”, sys.exc