python 调用系统命令 获取结束状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 调用系统命令 获取结束状态相关的知识,希望对你有一定的参考价值。

#!/usr/bin/python
import os
a=os.popen('service ldap restart')
print a

结果:<open file 'service ldap restart', mode 'r' at 0xb7ea8218>

正确的不是应该输出 0 吗?

怎么判断一条系统命令是否执行成功

使用subprocess,可以得到返回的结果和返回的状态

>>> import subprocess
>>> p = subprocess.Popen('service ldap restart', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> p.wait()
1
windows系统,返回1,没有执行成功。
>>> p = subprocess.Popen('cmd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
>>> p.wait()
0
>>>
随便输入一个windows的命令cmd,返回的结果是0.
参考技术A open返回的肯定是一个打开对象,就是你代码中那样,关闭打开的对象后才会返回0 参考技术B >>> a=os.system('echo hello world')
>>> print a
0
>>>

shell脚本中调用JAVA 程序,如何让JAVA运行结束后,再执行下面命令(只有java运行完,下面对数据的处理才有用)

思路,调用JAVA ,运行完后,使用sqlplus 修改数据库状态,根据数据库状态再 nohup sh single1.sh ,现在JAVA 没运行完,就修改了数据库的状态,操作系统是AIX 的
现在大多数提到的方法就是 写个不断检测的JAVA 是否运行完的程序,还有更简单的方法吗

调用java的时候不要挂在后台执行就可以了, 如果说你的java程序名叫 Test.class 或者 Test.jar

shell脚本里调用JAVA程序
#!/bin/sh
java Test.class ##或者java -jar Test.jar
stat=`sqlplus .......`
if [ $stat = "**"]
then
nohup sh single1.sh
fi

shell里的命令也是按顺序执行的,java调用没返回的时候是不会继续往下执行的
如果你调用java程序的时候,命令后面带了个 & 符,则这条命令是在后台执行的,shell会继续执行下一条命令
参考技术A 在你的shell中添加一条检查java程序运行状态的不就好了么,也不对程序整体结构造成多大的破坏。
看你脚本的设置,应该是一个demon进程,本身不就是一个不断检查状态的过程么追问

详细点,怎么添加

以上是关于python 调用系统命令 获取结束状态的主要内容,如果未能解决你的问题,请参考以下文章

Python调用系统命令的6种方法

21 python调用外部系统命令

shell脚本中调用JAVA 程序,如何让JAVA运行结束后,再执行下面命令(只有java运行完,下面对数据的处理才有用)

Python调用外部系统命令

使用 python 获取 Linux 系统信息(通过dmidecode命令)

python实现系统脚本命令调用模块---subprocess模块