Python脚本通过os.system()调用shell脚本退出代码256而不是1。为什么?
我正在编写一个Python脚本,处理不同shell脚本的退出代码 当我通过命令提示符调用shell脚本并使用Python脚本通过os.system()调用shell脚本退出代码256而不是1。为什么?,shell,python,Shell,Python,我正在编写一个Python脚本,处理不同shell脚本的退出代码 当我通过命令提示符调用shell脚本并使用echo$?请求退出代码时,我得到一个1。 当我通过python脚本调用shell脚本时,我假设值为1,但结果却是256 发生了什么事 这是我测试相机的shell脚本: #!/bin/bash #cam.sh if [ -r /dev/video0 ] then #taking a picture ffmpeg -f video4linux2 -s 640x480 -i
echo$?
请求退出代码时,我得到一个1。
当我通过python脚本调用shell脚本时,我假设值为1
,但结果却是256
发生了什么事
这是我测试相机的shell脚本:
#!/bin/bash
#cam.sh
if [ -r /dev/video0 ]
then
#taking a picture
ffmpeg -f video4linux2 -s 640x480 -i /dev/dev0 -ss 0:0:2 -frames 1 ~/Desktop/testbild.jpg 2>/dev/null
#showing a stream
timeout 10s vlc v4l2:///dev/video0 --no-audio --no-video-title-show
exit 0
else
exit 1
fi
还有我的Python调用:
#!/usr/bin/env python
#exitcodetest.py
import os
command = "sh ~/Desktop/cam.sh"
camera = os.system(command)
print(camera)
为什么?因为
os.system
不返回exitcode,而是返回waitstatus。要将其转换为返回代码,您需要使用os.waitstatus\u To\u exitcode
(或者对于较旧的Python版本,使用os.WEXITSTATUS
)
有关更多详细信息,请参阅python文档和。以及man system
和man waipid
了解等待状态的更多详细信息
另外,如果您需要一些更“用户友好”的方式从Python运行命令/程序,我建议使用。这是
sh
的返回代码。是sh
bash吗?尝试command=“~/Desktop/cam.sh”
(首先使用chmod+x
。脚本已经可以通过chmod+x运行。谢谢!文件扩展名格式不好,调用方指定解释器也是如此。@ctrl-alt-delor我真的不明白你想说什么?AGeß而不是sh~/Desktop/cam.sh
停止指定shell,直接运行脚本,~/Desktop/cam.sh
非常感谢!我现在正在使用camera=os.WEXITSTATUS(os.system(command))
并获取假定的1:)
In [2]: os.WEXITSTATUS(256)
Out[2]: 1