2012-12-31 61 views
1

我收到以下錯誤。我實際上可以從下面給出的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

您已將此問題標記爲「python-2.7」,而上面的堆棧跟蹤顯示「python2.6」 - 這是可疑的。這是一個SCons腳本嗎? – Johnsyweb

+0

您確定您當前的工作目錄包含「build」目錄嗎? – jdi

+0

@Johnsyweb - oops sorry..its 2.6.5..its python script .. – user1934146

回答

2

嘗試添加額外的參數:SHELL =真

代碼:

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

有在Python docs一個聲明,這可能會導致安全問題,這取決於你的程序的情況下。

IMO,你應該管道stdout和stderr來分隔變量,並使用通信方法來調用該命令。您將能夠更輕鬆地處理輸出和錯誤。

代碼:

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

祝您好運!

+0

你應該用字符串替換列表 – jdi

+0

哦,它應該仍然有效,但是,是的,這應該爲他簡化它。 –

+0

@Paul - 當使用命令「makecommand = Popen(['source build/envsetup.sh'],stdout = PIPE,stderr = PIPE,shell = True)時,我總是收到這個錯誤。」communicate()「stderr = makecommand .communicate()[1] AttributeError:'元組'對象沒有屬性'溝通' – user1934146

3

當你調用POPEN,您可以傳遞一個字符串命令shell=True,或者您希望通過名單。你應該嘗試改變命令:

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

我只評論POPEN使用,沒有任何有關你正在運行的實際命令。

0

source是一個內置的shell,而不是一個可執行文件。改爲嘗試"sh build/envsetup.sh"。還有什麼jdi說。

相關問題