`
kanpiaoxue
  • 浏览: 1781105 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

python运行os.system(cmd)的退出问题

 
阅读更多

 

发现之前有人写了一个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退出。

 

 

分享到:
评论

相关推荐

    python中os模块简介

    1. os.system(cmd):执行 shell 命令,返回值是脚本的退出状态码,0 代表成功,1 代表不成功。 2. os.chdir(path):改变目录到指定目录。 七、文件大小相关函数 1. os.path.getsize():获得文件的大小,如果为目录...

    python自动化脚本安装指定版本python环境详解.pdf

    `os`模块提供了与操作系统交互的函数,如判断用户权限(通过`os.getuid()`检查是否为root用户),执行系统命令(如`os.system(cmd)`来下载、解压和安装Python)。而`sys`模块则用于处理Python运行时的配置和退出程序...

    在python 中实现运行多条shell命令

    ### 在Python中实现运行多条Shell命令 在Python编程中,有时我们需要调用系统的Shell命令来完成特定的任务,比如文件操作、系统管理等。本文将详细介绍如何在Python中执行多条Shell命令,并探讨不同的实现方法及其...

    python常用的函数[文].pdf

    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命令三种方法

    这里我们将详细探讨三种在Python中调用CMD命令的方法:`os.system()`,`os.popen()`,以及`subprocess.Popen()`。 1. **`os.system()`** `os.system(command)` 方法是最简单的调用CMD命令的方式。当你调用 `os....

    python脚本执行CMD命令并返回结果的例子

    2. os.system()方法:os.system()是一个非常基础的执行命令的方法,它通过Python调用系统shell来运行指定的命令,并且该方法返回值是命令的退出状态码而非命令的输出结果,返回状态码为0表示命令执行成功,非0表示有...

    Python调用shell命令常用方法(4种)

    在Python中,`os`模块提供了一系列与操作系统交互的接口,其中包括`system`函数,它允许我们直接执行Shell命令。此方法简单易用,但功能较为有限。 ```python import os # 执行`ls -al`命令并打印状态码 val = os....

    获取cmd输出

    - **`os.system`**:这个函数会执行命令并返回命令的退出状态。 #### 2.2 示例代码 ```python import os import commands # 定义命令 cmdstr = 'ipconfig -all' # 使用 commands.getstatusoutput status, output ...

    Python中常用的模块用法分析.docx

    `os.system(cmd)`执行系统命令,如创建文件、移动文件等。 总之,Python的内置模块提供了大量功能,从基本的类型转换和函数调用,到复杂的系统交互和文件操作。理解并熟练使用这些模块,能极大地提升Python开发的...

    python常用函数年初大总结(精编版).docx

    - **`os.system(cmd)`**:运行 `cmd` 命令。 - **`os.chdir(path)`**:改变当前工作目录到 `path`。 - **`os.mkdir(path)`**:创建一个名为 `path` 的目录。 - **`os.rmdir(path)`**:删除名为 `path` 的空目录...

    Python中常用的模块用法分析[借鉴].pdf

    11. `os.system(cmd)`:执行系统命令,如创建目录、写入文件等。 通过上述介绍,我们可以看到Python内置模块和操作系统相关模块的强大功能。它们使得Python不仅能够处理各种数据类型,还能够方便地与操作系统进行...

    Python与shell的3种交互方式介绍

    `os.system()` 方法用于执行shell命令,并返回一个退出状态码。这个状态码通常为0表示命令执行成功,非0则表示失败。例如,执行`python hello.py`后,输出`hello, world!`,并返回状态码0。 2. os.popen(cmd) `os...

    举例讲解Linux系统下Python调用系统Shell的方法

    总结,Python在Linux环境下调用Shell命令的方法主要包括`os`模块的`system`、`popen`方法以及`subprocess`模块。具体选择哪种方法取决于你是否需要获取命令的输出、处理错误和控制进程等需求。在Python 3.x中,`...

    Python调用shell cmd方法代码示例解析

    总结来说,Python提供了多种方式来调用shell命令,如os.system()、os.popen()、commands.getstatusoutput()以及subprocess模块。根据实际需求,可以选择合适的方法。在Python 3.x中,subprocess模块是最推荐的选择,...

    用Python制作EXE

    - 在Python脚本的末尾增加`os.system("pause")`语句。 - 这样当脚本执行完毕后,会自动暂停,并显示“请按任意键继续...”,等待用户按键后才会退出程序。 - 这对于防止程序执行完毕后命令行窗口一闪而过的情况...

    Python下调用Linux的Shell命令的方法

    `subprocess`模块是Python 2.4引入的,替代了`os.system`和`os.popen`,提供了更强大、更灵活的子进程控制功能。主要有以下几个常用方法: 2.1. `subprocess.call`和`subprocess.run` 这两个方法执行命令并等待...

    日常整理python执行系统命令的常见方法(全)

    例如,你可以用 `os.system('command')` 来运行一个命令,如 `os.system('cat /etc/passwd')`,它会打印出 `/etc/passwd` 文件的内容,并返回命令的退出状态码。退出状态码通常为0表示命令成功执行,非零值表示存在...

    python学习笔记

    - `os.system(cmd)`: 运行系统命令。 **示例**: ```python import sys import os print(sys.argv) print(os.environ["HOME"]) os.chdir('d:\\outlook') print(os.getcwd()) ``` #### 七、内置模块与函数 - **...

    linux系统使用python监控apache服务器进程脚本分享

    crtrl.py监控Apache服务器进程的Python 脚本 ... 2: print “apache 进程异常退出, 4 秒后重新启动” time.sleep(3) os.system(“service apache2 restart”) except: print “Error”, sys.exc

Global site tag (gtag.js) - Google Analytics