接触python不久,最近碰到一个棘手的问题,关于subprocess.Popen
通过ret=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)的形式,在shell中执行cmd命令
通过ret.returncode获得返回值
通过retout=ret.comunication()[0]获取输出
问题就在于cmd的形式和返回值及返回输出上:
如果cmd中带有重定向操作,那么retoutd就无法获得cmd的输出;
如果cmd中指定后台执行,那么ret.returncode就无法获取cmd的返回值,而是只能获得shell执行命令的返回值
如果cmd中带有重定向和后台执行,那么ret.returncode和retout都无法获得cmd中的返回值和输出
例子:
test.sh:
echo "this is test.sh"
exit 127
test.py:
cmd=""
ret=subprocess.Popen(cmd, shell=True, stdout=PIPE)
retout=ret.comunication()
print(ret.returncode, retout)
cmd="test.sh" 结果输出:127 this is test.sh
cmd="test.sh &" 结果输出:0 this is test.sh
cmd="test.sh > abc.txt" 结果输出:127
cmd="test.sh > abc.txt &" 结果输出:0