Python脚本通过os.system()调用shell脚本退出代码256而不是1。为什么?

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

我正在编写一个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 /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