2014-11-06 6 views
0

Windows와 32 비트 Python 2.7을 사용하고 있습니다.파이썬 하위 프로세스가 올바른 인수를 취하지 않습니다

나는 파이썬에서 서브 프로세스 모듈을 적절하게 사용하는 것을 포함하여 많은 게시물을 이미 읽었습니다. 쉘 = True, 단일 문자열 대 문자열의 목록, 원시 문자열 등을 사용합니다. 나는 혼란 스러울뿐만 아니라 실행중인 프로그램의 출력을 생성하지 못하고 설명서에 소개 된 명령 중 일부를 실행하지 못합니다.

예를 들어, 파이썬 대화 형 콘솔에서 https://docs.python.org/2/library/subprocess.html#subprocess.check_call에 소개 된 "subprocess.check_call (["ls ","-l "])"을 사용하려고하면 "WindowsError : [오류 2] 지정된 파일을 찾으십시오 ".

마찬가지로 "documentation"에 정확하게 나타나는대로 "subprocess.call (["ls ","-l "])"을 사용하려고하면 Python은 다시 "WindowsError : [오류 2]를 생성합니다. 지정한 파일을 찾으십시오 "오류가 발생했습니다. 문서 페이지에서 읽은 것과 다른 "subprocess.call (["ls ","-l "], shell = True)"을 사용하면 올바르게 실행되고 종료 상태 1을 반환합니다.

더 중요한 것은 Python을 통해 실행하고자하는 Windows 실행 가능 프로그램이 있다는 것입니다. 나는이 프로그램이 Cygwin 터미널에서 제대로 작동하는지 확인했다. 파이썬으로 실행할 때 어떤 출력도 출력하지 않는다. (이 문제는 몇 번이나 물어 봤지만 해결책은 나에게 도움이되지 못했다.)

import subprocess as sub 

rt = sub.Popen([r'C:/Users/Y L/Documents/ssocr', '-d', '-1', 'Sample.JPG'], stdin = sub.PIPE, stdout = sub.PIPE, stderr = sub.PIPE) 
out, err = rt.communicate() 
print(out, err) 

출력 할 때 (out, err), 빈 문자열 쌍의 튜플을 생성합니다. 흥미롭게도, 프로그램은 동일한 방식으로 실행되고 전달 된 이미지 파일이 총 횡설수설 일 때 동일한 출력을 생성합니다. 이는 인수가 제대로 전달되지 않음을 의미합니다.

import subprocess as sub 

rt = sub.Popen([r'C:/Users/Y L/Documents/ssocr', '-d', '-1', 'asdfasdf.JPG'], stdin = sub.PIPE, stdout = sub.PIPE, stderr = sub.PIPE) 
out, err = rt.communicate() 
print(out, err) 

인수가 하위 프로세스 모듈에서 처리되는 것에 대해 누락 된 것이 있습니까?

+0

스킵 (명령이 cmd 내부 명령 인 경우 먼저 cmd /c 추가) 윈도우에서

는 먼저 Popen 단일 명령 줄을 통과 한 후 cmd 창 바로 아래 명령을 실행하고, 함께 더 나은 행운을 가질 수있다 r은 슬래시를 뒤집습니까? – Will

+0

@Will 그건 전에 시도한 것들 중 하나지만 운이 아니야. Windows는 '/'또는 '\'를 사용하는 것으로 보이며 'r'은 경로의 간격을 올바르게 인식하는 것입니다. –

+0

'Y L'은 디렉토리의 이름입니까? 즉, 실행 파일은'C :/Users/Y'가 아닌'C :/Users/Y L/Documents/ssocr'이며 첫 번째 인수는'L/Documents/ssocr'입니다. – Dunes

답변

1

ls은 유닉스 계열 시스템의 명령이며 Windows에서는 존재하지 않습니다. dircmd의 내부 명령이므로 거의 동일한 명령은 cmd /c dir이됩니다.

+0

그래서 cmd 아래에 'C :/Users/Y L/Documents/ssocr -d -1 Sample.JPG'명령을 실행해야합니까? 어떻게하면 될까요? Popen의 첫 번째 인수로 'cmd'를 포함하고 Popen 호출에서 후속 인수를 추가해야합니까? –

+0

실제로 'cmd'를 인수 목록의 첫 번째 요소로 전달하면 터미널 프롬프트가 출력으로 파이프 되기만하지만 프로그램 출력은 여전히 ​​누락됩니다. 내가 당신이 정확히 제안한 것을 해석합니까? –

+0

내가 제안한 것은'cmd' 창을 열고 그 창에서 어떤 일이 벌어지는 지 확인하는 명령을 입력하는 것이었다. 필자는 명령 구문의 문제를 파이썬에서 실행하는 문제와 분리하려고합니다. –

관련 문제