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

问题描述 投票:0回答:4

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

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

它的工作原理如下:用法:./veye_mipi_i2c.sh [-r/w] [-f] 函数名称 -p1 param1 -p2 param2 -b 总线

选项:

-r 读

-w 写

-f [函数名] 函数名

-p1 [param1] 每个函数的param1

-p2 [param1] 每个函数的param2

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

当我尝试通过我的 Spyder 编辑器和 os.system 在 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启动时无法执行这些额外的脚本吗?这对我来说没有意义,但很多事情也是如此......

非常感谢

python bash terminal os.system
4个回答
1
投票

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

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

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

只需在终端中执行它就可以了。


0
投票

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

同时,跑步

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

更改目录会有帮助。


0
投票

使用子进程并捕获输出:

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

检查output.stderr和output.stdout


0
投票

Python打印函数显示系统调用的退出状态。尝试不使用 print 函数,您应该只得到系统调用的输出,而没有退出状态:

import os
status = os.system('/home/pi/VeyeMipi/Camera_Folder/veye_mipi_i2c.sh -w -f mirrormode -p1 0x04 -b 10')
status
© www.soinside.com 2019 - 2024. All rights reserved.