2011-05-03 5 views
2

파이썬 스크립트에서 명령 프롬프트 (& 몇 가지 인수를 명령 프롬프트에 전달)를 호출하는 데 도움이 필요합니다.파이썬 스크립트에서 명령 프롬프트를 호출 할 때 문제가 발생했습니다.

저는 UI 개발을 위해 pyqt4를 사용하고 UI에는 실행 버튼이 있습니다. 실행 버튼을 선택하면 명령 프롬프트를 호출하고 스크립트 이름을 인수로 전달하고 싶습니다.

self.connect(run_button, SIGNAL('clicked()'), self.runscript) # this is my run button signal and i'm calling the runscript() 

def runscript(self): 
    print 'Inside Run Script' 
    os.chdir('C:\PerfLocal_PAL') 
    try: 
     subprocess.call(['C:\windows\system32\cmd.exe']) 
    except: 
     print 'Exception Caused.' 

실행 버튼을 클릭하면 응용 프로그램이 종료되고 명령 프롬프트가 전혀 표시되지 않습니다. 같은 결과로 os.system을 사용해 보았습니다.

도 호출 함수에 인수를 전달하는 방법을 알고 싶습니다.

이 문제에 대한 도움을 주시면 대단히 감사하겠습니다.

덕분에,

답변

2

제대로 파이썬에서 파일 경로를 정의하려면

  • 슬래시 : Windows에서, 당신은 세 가지 중 하나를 수행 할 필요가 "C:/PerfLocal_PAL"이 (파이썬 앞으로 이해가 플랫폼에 관계없이 슬래시)
  • 를 사용하여 원시 문자열 : r"C:\PerfLocal_PAL"
  • 는 백 슬래시 탈출
  • : "C:\\PerfLocal_PAL"

이것은 당신의 chdir 전화와 subprocess.call 호출에 모두 영향을줍니다.

그러나 부모 프로세스가 GUI 응용 프로그램이므로 stdin, stdoutstderr에 대한 콘솔 스트림이 없기 때문에 문제가 발생합니다.

: 당신은 또한 당신의 작업 디렉토리를 설정하기보다는 부모 프로세스의 CWD를 변화하는 start"/D" 인수를 사용할 수 있습니다

subprocess.call("start", shell=True) 

: 완전히 별도의 명령 창을 얻을 수있는 대신 다음을 사용하십시오

subprocess.call(["start", "/DC:\\PerfLocal_PAL"], shell=True) 
+0

코드의이 부분이 감사합니다. – user596922

0

한 가지 문제는 그것이 완료 될 때까지 subprocess.call 차단합니다, 당신이 그것을 종료 할 때까지 cmd.exe를 반환하지 것입니다. 그것은 '그냥 죽는다'라고 대답하지만 콘솔이 나타나지 않는다고 설명 할 수는 없습니다. 다음으로 시작하십시오 :

subprocess.Popen(['C:\Windows\system32\cmd.exe']) 

적어도 차단하지 않습니다. 당신이 그것을 표시 할 수 있다면, 다음과 같이 당신의 인수를 시도 :

subprocess.Popen(['C:\Windows\system32\cmd.exe', 'program_or_script', 'arg1']) 
0

당신이 봤어이 전혀 디버깅? 스크립트가 실패하는 행은 무엇입니까? 실제로 runscript 함수를 시작합니까?

cmd.exe에 인수를 전달하는 것에 대해서는 subprocess.call에 대한 설명서를 참조하십시오. 프로그램에 명령 줄 매개 변수를 제공하는 두 번째 인수를 가질 수 있음을 보여줍니다.

subprocess.call(["C:\windows\system32\cmd.exe", "scriptname.bat"]) 
0

신호 연결 및 서브 프로세스 호출이 정상적인 것 같습니다. (명령 프롬프트에서 응용 프로그램을 시작할 때) 나는 당신이 점점 오류가 형태의 추측

os.chdir(r'C:\PerfLocal_PAL') 

:에 CHDIR 통화를 변경

 
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'C:\PerfLocal_PAL' 
관련 문제