使用 os.systems 在 Python 中执行的 Bash 脚本返回 0 但不执行/写入

问题描述

我有一个 bash 脚本,可以在 Rpi 终端的文件夹中完美运行:

./veye_mipi_i2c.sh -r -f mirrormode -b 10

它是这样工作的:用法:./veye_mipi_i2c.sh [-r/w] [-f] 函数名 -p1 param1 -p2 param2 -b bus

选项:

-r 读取

-w 写入

-f [函数名] 函数

-p1 [param1] 每个函数的param1

-p2 [param1] 每个函数的param2

-b [i2c 总线编号] i2c 总线编号

当我尝试通过带有 os.system 的 Spyder 编辑器在 Python (2) 中运行它时,我得到一个“0”返回,我将其解释为“成功执行”,但实际上脚本尚未执行并且函数尚未执行。我知道这一点是因为脚本假设要更改相机的功能,并且通过检查我之后拍摄的图像,我可以看到没有任何变化。

import os
status = os.system('/home/pi/VeyeMipi/Camera_Folder/veye_mipi_i2c.sh -w -f mirrormode -p1 0x04 -b 10')
print status

知道这是什么原因造成的吗? bash 脚本使用位于同一文件夹位置(读取和写入)的另外两个脚本。难道是,通过 Python 启动时,它无法执行这些额外的脚本?这对我来说没有意义,但很多事情也是如此......

非常感谢

解决方法

好的,我知道我的问题不是示例性的,因为缺少一个最小的可重复示例,但由于我不明白问题是什么,我无法创建一个。

我发现了,问题出在哪里。我在 bash 中调用的脚本需要在同一文件夹中的另外两个脚本。即“写”脚本和“读”脚本。在文件夹中的终端执行时,没问题,因为文件夹是工作目录。

我尝试在 Spyder 编辑器中执行脚本并将文件位置添加到用户界面的 PATH 中。但它仍然无法执行文件夹中的“写入”脚本。

只需在终端中执行即可。

,

使用子进程并捕获输出:

import subprocess
output = subprocess.run(stuff,capture_output=True)

检查 output.stderr 和 output.stdout

,

如果您修复脚本以使它们不依赖于当前的工作目录(这是一种非常糟糕的做法)会有所帮助。

同时,运行

import subprocess
p = subprocess.run(['./veye_mipi_i2c.sh','-r','-f','mirrormode','-b','10'],cwd='/home/pi/VeyeMipi/Camera_Folder')
print(p.returncode)

更改目录会有所帮助。