【发布时间】:2018-10-17 05:38:36
【问题描述】:
下面是shell脚本中的代码
source /proj/common/tools/repo/etc/profile.d/repo.sh
repo project init $branch
repo project sync
source poky/fnc-init-build-env build
bitbake -g $image
我正在尝试将 shell 脚本转换为 python 脚本
a = subprocess.call("source /proj/common/tools/repo/etc/profile.d/repo.sh", shell=True)
b = subprocess.call("repo project init " + branch, shell=True)
b2 = subprocess.call("repo project sync", shell=True)
c = subprocess.call("source poky/fnc-init-build-env build", shell=True)
os.chdir("poky/build")
d = subprocess.call("bitbake -g " + image, shell=True)
但我收到以下错误
/bin/sh: bitbake: command not found
如何在 python 中解决这个问题?
【问题讨论】:
-
你安装了“bitbake”吗?
-
否则您的安装在 $PATH 以外的目录中
-
subprocess.call("bitbake -g " + image, shell=True)实际上比您替换它的 shell 错误得多。如果image='$(touch /tmp/evil).jpg'在 shell 中,那将是无害的;在您的 Python 中,它会创建一个不需要的文件(或运行嵌入在文件名中的任何其他命令)。如果您完全关心安全性或正确性,请使用shell=False。 -
...也就是说,直接关注的是,您
source repo.sh所在的 shell 与您后来调用bitbake -g的 shell 完全不同. -
...所以,如果
bitbake仅在上述(source、repo等)命令在同一个 shell 中运行后才可用,则将这些命令拆分为多个subprocess.call()s 永远不会工作。