Bash 脚本在 Python 内执行 os.systems returns 0 但不执行/写入
Bash script executed within Python with os.systems returns 0 but does not execute/ write
我有一个 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总线数
当我尝试通过我的 Spyder 编辑器使用 os.system 在 Python (2) 中 运行 它时,我得到一个“0”return,我将其解释为“执行成功”但实际上脚本还没有执行,功能也没有执行。我知道这一点是因为脚本应该会改变相机功能,通过检查我之后拍摄的图像,我可以看到没有任何改变。
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 启动时无法执行这些额外的脚本?这对我来说没有意义,但很多事情也是如此....
非常感谢
使用子进程并捕获输出:
import subprocess
output = subprocess.run(stuff, capture_output=True)
检查 output.stderr 和 output.stdout
好的,我知道我的问题不是典型的,因为缺少最小的可重现示例,但由于我不明白问题出在哪里,所以我无法创建一个。
我已经找到问题所在了。我在 bash 中调用的脚本需要同一文件夹中的另外两个脚本。即“写”脚本和“读”脚本。在文件夹中的终端中执行时,没问题,因为该文件夹是工作目录。
我尝试在 Spyder 编辑器中执行脚本,并将文件位置添加到用户界面的 PATH 中。但是仍然无法执行文件夹中的“写入”脚本。
只需在终端中执行即可。
如果您修复脚本,使它们不依赖于当前工作目录(这是一个非常糟糕的做法),将会有所帮助。
同时,运行
import subprocess
p = subprocess.run(['./veye_mipi_i2c.sh', '-r', '-f', 'mirrormode', '-b', '10'], cwd='/home/pi/VeyeMipi/Camera_Folder')
print(p.returncode)
更改目录会有帮助。
我有一个 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总线数
当我尝试通过我的 Spyder 编辑器使用 os.system 在 Python (2) 中 运行 它时,我得到一个“0”return,我将其解释为“执行成功”但实际上脚本还没有执行,功能也没有执行。我知道这一点是因为脚本应该会改变相机功能,通过检查我之后拍摄的图像,我可以看到没有任何改变。
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 启动时无法执行这些额外的脚本?这对我来说没有意义,但很多事情也是如此....
非常感谢
使用子进程并捕获输出:
import subprocess
output = subprocess.run(stuff, capture_output=True)
检查 output.stderr 和 output.stdout
好的,我知道我的问题不是典型的,因为缺少最小的可重现示例,但由于我不明白问题出在哪里,所以我无法创建一个。
我已经找到问题所在了。我在 bash 中调用的脚本需要同一文件夹中的另外两个脚本。即“写”脚本和“读”脚本。在文件夹中的终端中执行时,没问题,因为该文件夹是工作目录。
我尝试在 Spyder 编辑器中执行脚本,并将文件位置添加到用户界面的 PATH 中。但是仍然无法执行文件夹中的“写入”脚本。
只需在终端中执行即可。
如果您修复脚本,使它们不依赖于当前工作目录(这是一个非常糟糕的做法),将会有所帮助。
同时,运行
import subprocess
p = subprocess.run(['./veye_mipi_i2c.sh', '-r', '-f', 'mirrormode', '-b', '10'], cwd='/home/pi/VeyeMipi/Camera_Folder')
print(p.returncode)
更改目录会有帮助。