问题描述
我有一个 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 写入
-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)
更改目录会有所帮助。