1

我收到以下错误。我实际上可以从下面给出的 buid 根目录中看到“build/envsetup.sh”,但我不断收到此错误。

以下行有什么问题吗?

  makecommand=Popen(['source build/envsetup.sh'],stderr=PIPE)" 

BUILD_ROOT_DIR /local/mnt/workspace/AU

Traceback (most recent call last):
  File "test.py", line 266, in <module>
    main()
  File "test.py", line 263, in main
    cherrypick(base_change,SCRIPT_ROOT)
  File "test.py", line 204, in cherrypick
    makebuild(change)
  File "test.py", line 97, in makebuild
    makecommand=Popen(['source build/envsetup.sh'],stderr=PIPE)
  File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
4

3 回答 3

3

当您调用 Popen 时,您可以传递一个字符串命令,也shell=True可以传递一个列表。您应该尝试将命令更改为:

makecommand=Popen(['source', 'build/envsetup.sh'],stderr=PIPE)

我只评论 Popen 的使用,而不是与您正在运行的实际命令相关的任何内容。

于 2012-12-31T06:09:50.563 回答
2

尝试添加附加参数:shell=True

代码:

 makecommand=Popen('source build/envsetup.sh',stderr=PIPE, shell=True)

python文档中有一个免责声明,根据程序的上下文,这可能会导致安全问题。

IMO,您可能应该将 stdout 和 stderr 都通过管道传输到单独的变量并使用通信方法来调用命令。您将能够更轻松地处理输出和错误。

代码:

 cmd_out, cmd_err = Popen('source build/envsetup.sh', stdout=PIPE, stderr=PIPE, shell=True).communicate()

祝你好运!

于 2012-12-31T06:15:32.847 回答
0

source是内置的shell,而不是可执行文件。试试"sh build/envsetup.sh"吧。还有jdi所说的。

于 2012-12-31T06:09:55.237 回答