发现之前有人写了一个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退出。
相关推荐
在用pyinstaller打包后不想要后面的终端命令框,但是打包时加了-w或者–noconsole命令后会导致cmd程序不能运行从而出错。这个时候用subprocess可以解决该类问题。 import subprocess cmd = 'your command' res = ...
Python基础 python_os.system引用变量写法
Python的程序有两中退出方式:os._exit(), sys.exit()。本文介绍这两种方式的区别和选择。 os._exit()会直接将python程序终止,之后的所有代码都不会继续执行。 sys.exit()会引发一个异常:SystemExit,如果这个...
os.remove() 删除文件 ...os.system() 执行操作系统命令 os.execvp() 启动一个新进程 os.fork() 获取父进程 ID,在子进程返回中返回 0 os.execvp() 执行外部程序脚本(Uinx) os.spawn() 执行外部程序脚本(W
Apress.Pro.Python.System.Administration.Jul.2010.rar
今天小编就为大家分享一篇解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
通过官方网站https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz下载太慢,特提供此资源
基于python的os.path模块的常用方法及使用
python-3.10.11-macos11.pkg安装包适合mac os系统安装
python os.walk 遍历所有文件 文件夹(csdn)————程序
python-2.7.13.amd64.msi
opencv_python-4.2.0.32-cp27-cp27m-win32.whl文件,用来解决64位系统import cv2出错,在线cmd命令pip3 install opencv-python网速过慢也导致出错的问题。 操作方法:将文件下载后拷贝至Anaconda或者python安装目录...
今天小编就为大家分享一篇对python中的 os.mkdir和os.mkdirs详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
(1) os.system() 这个方法直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行返回的信息。 >>> import os >>> output = os.system('cat /proc/cpuinfo') ...
这是一个简单的 python 脚本,它模拟了 bash shell,而没有在 python 中使用 os.system。 实现的命令是带有标志 a,l , mv , cp , rm , tree 的 ls 。 要运行您的命令,请打开终端并输入 python terminal.py,然后...
本篇文章主要介绍了python使用os.listdir和os.walk获得文件的路径的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
C++实现python的os模块的walk函数,可绝对路径,相对路径,源代码以及编译好的二进制可执行文件。
os.remove不能用来删除文件夹,否则拒绝访问。 # -*- coding:utf-8 -*-import osif __name__ == “__main__”: os.remove(‘D:\\test’) 运行结果: 删除空目录: # -*- coding:utf-8 -*-import osif __name__ == ...