Python Subprocess.Popen不适用于Cross平台Yocto

时间:2017-11-22 10:55:17

标签: python subprocess yocto pyro

我在yocto Pyro上使用python脚本构建包。

在Python脚本中,我正在使用subprocess.Popen

根据我的理解,当Python脚本运行Cross Platform时,它应该采用Cross-platfrom Python子进程路径,但在我的情况下,它采用本机路径" /usr/lib/python2.7/subprocess.py&# 34;即PC。

因为我正面对in _execute_child raise child_exception。 可以帮助解决这个问题吗?

错误在

之下
 File "/usr/lib/python2.7/subprocess.py", line 566, in check_output
     process = Popen(stdout=PIPE, *popenargs, **kwargs)
 File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
     errread, errwrite)
 File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
  raise child_exception
 OSError: [Errno 2] No such file or directory

PS:我已经尝试过" shell = True"选项,但它没有解决我的问题。

2 个答案:

答案 0 :(得分:2)

如果您在构建时运行脚本,那么它将运行主机python,因为它无法运行目标python二进制文件,原因很明显是它的目标二进制文件。

您的展示的例外仅仅是您尝试运行popen无法找到的二进制文件。请记住,在构建内部$ PATH已经过消毒,因此不会包含它在bitbake之外的内容。

答案 1 :(得分:0)

您应该设置一个指向所需python设置的环境变量,并将其传递给子进程调用。像这样的东西

export venv='/path/to/python'

venv = os.environ["VENV_PYTHON"]
p = subprocess.Popen([venv, command], env=os.environ.copy())

这将使用所需的python设置启动你的python脚本