即使文件存在也没有文件错误

时间:2012-12-31 06:02:37

标签: python python-2.6

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

以下行有什么问题吗?

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

BUILD_ROOT_DIR     /本地的/ mnt /工作区/ 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

3 个答案:

答案 0 :(得分:3)

当你打电话给Popen时,你可以传递一个带有shell=True的字符串命令,或者你应该传递一个列表。您应该尝试将命令更改为:

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

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

答案 1 :(得分:2)

尝试添加其他参数:shell = True

代码:

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

python docs中有一个免责声明,这可能会导致安全问题,具体取决于程序的上下文。

IMO,您可能应该将stdout和stderr连接到单独的变量并使用communic方法来调用该命令。您将能够更轻松地处理输出和错误。

代码:

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

祝你好运!

答案 2 :(得分:0)

source是一个内置的shell,而不是一个可执行文件。请尝试使用"sh build/envsetup.sh"。还有什么jdi说的。