2013-05-20 3 views
0

서브 프로세스를 실행하고 명령 창에서 whats 출력을 인쇄해야하는이 코드가 있습니다. 나는 완전히 별도의 명령 창을 열면, 그러나서브 프로세스가 올바르게 작동하지 않습니다.

MSBUILD : error MSB1009: Project file does not exist. 
Switch: "C:/Users/bgb/Documents/Brent/Code/Visual Studio/tree.FormControls.UnitTests./tree.FormControls.UnitTests.vbproj" 

, 나는 이상 복사 msprompt를 붙여 : 나는 컴파일러에서이 프로그램을 실행할 때

import subprocess 

msprompt = 'C:\Windows\Microsoft.NET\Framework64\\v4.0.30319\\MSBuild.exe' 
path = "C:/Users/bgb/Documents/Brent/Code/Visual Studio/tree.DataManagement.UnitTests./tree.DataManagement.UnitTests.vbproj" 

def command(msprompt, openFile): 

    for line in finalPathList: 


     p = subprocess.Popen([msprompt, path], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
     for line in p.stdout.readlines(): 
      print line, 
     retval = p.wait() 

그것은 나던 일,이 메시지를 뱉어 그런 다음 path을 복사하여 명령 창에 붙여 넣은 다음 Enter 키를 누르면 완벽하게 작동합니다. 내 command 기능에서 엉망이 된 것을 누구나 알 수 있습니까 ??

도움을 주시면 대단히 감사하겠습니다.

+0

글쎄, 내가 여기가 실제로 당신의 코드 ('openFile','finalPathList' ...)가 아니라는 생각을하게하는 몇가지 것들이 있습니다,하지만 여러분의 경로 구조를 표준화하려고 시도 할 것입니다. 당신은 Windows를 사용하기 때문에,'os' 라이브러리의 어떤 것도 통과시키지 않으면 백 슬래시를 사용하여 경로 리터럴을 고수해야합니다. –

+0

은 원시 문자열 인 \ 'backspace \ with \ backspace'를 사용하는 것이 바람직합니다. 경로 구분 기호를 이스케이프하지 않아도됩니다. –

+0

@ThomasFenzl 또는 그. 원시 문자열을 사용하면 큰 프로그램에서 혼란 스러울 수 있지만, 거의 항상 같은 시간에 함께 작업해야하기 때문에 결국 혼란 스러울 수 있습니다. –

답변

1

경로 형식이 올바르지 않습니다. 두 개의 슬래시 (\\)와 슬래시 (/)가 있어야합니다.

디버깅을 위해 먼저 os.path.exists(path)을 사용하여 경로가 올바른지 확인하십시오. 그런 다음 os.path.join을 사용하여 경로를 수정할 수 있습니다 (문서 here).

+0

Isn \/슬래시 \ 백 슬래시? –

+0

@enginefree 백 슬래시라고합니다. 슬래시는 다른 하나 (/)입니다. – khattam

+0

슬래시의 방향을 바꾸는 것은 중요하지 않습니다. 여전히 작동하지 않습니다. 명령 줄 프롬프트에서 직접 시도 할 때 슬래시의 방향에 상관없이 작동합니다. 따라서 Idk ... :( – bbesase

관련 문제