我收到以下错误。我实际上可以从下面给出的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
答案 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说的。