문제

os.system ()을 사용하여 입력 및 출력 파일을 취하는 다른 프로그램을 호출하려고합니다. 내가 사용하는 명령은 긴 폴더 이름으로 인해 ~ 250 자입니다.

명령을 호출하려고하면 오류가 발생합니다. The input line is too long.

나는 거기있는 것 같아요 255 character limit (C 시스템 호출을 사용하여 구축되었지만 그에 대한 제한 사항도 찾을 수 없었습니다).

디렉토리를 변경하려고했습니다 os.chdir() 폴더 트레일 길이를 줄이려면 사용하려고 할 때 os.system() ~와 함께 "..\folder\filename" 상대 경로 이름을 처리 할 수는 없습니다. 이 한계를 해결하거나 상대 경로를 인식 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

대신 하위 프로세스 모듈을 사용해야합니다. 보다 이것 OS.System 호출을 사용하여 하위 프로세스를 사용하는 방법에 대한 Little Doc.

다른 팁

사용하는 것이 좋습니다 subprocess.Popen(), 이것은 문제를 해결하지 않습니다.

문제는 255 자 제한이 아닙니다, 이것은 DOS 시대에 사실이었고 나중에 Windows NT/2000의 경우 2048로 증가했으며 Windows XP+의 경우 다시 8192로 증가했습니다.

그만큼 실제 해결책 Windows API에서 매우 오래된 버그를 해결하는 것입니다. _popen () 및 _wpopen ().

명령 줄 동안 인용문을 사용하는 경우 Quoates에서 전체 명령을 추가해야합니다. 그렇지 않으면 The input line is too long 에러 메시지.

Windows XP로 시작하는 모든 Microsoft 운영 체제는 8192 자 제한을 가졌으며 이제는 괜찮은 명령 줄 사용에 충분하지만이 버그를 해결하는 것을 잊었습니다.

그들의 버그를 극복하기 위해 전체 명령을 이중 인용문으로 포함하십시오, 그리고 당신이 더 현실을 알고 싶다면 _popen ()에 대한 msdn 댓글.

이 효과가 있기 때문에주의하십시오.

prog
"prog"
""prog" param"
""prog" "param""

그러나 이것들은 효과가 없습니다 :

""prog param""

필요할 때 따옴표를 추가하는 함수가 필요한 경우 http://github.com/ssbarnea/tendo/blob/master/tendo/tee.py

당신은 사용해야합니다 하위 프로세스 OS.System 대신.

하위 프로세스는 디렉토리를 변경할 수 있다는 이점이 있습니다.

import subprocess
my_cwd = r"..\folder\"
my_process = subprocess.Popen(["command name", "option 1", "option 2"], cwd=my_cwd)
my_process.wait() # wait for process to end
if my_process.returncode != 0:
    print "Something went wrong!"

하위 프로세스 모듈에는 위의 부분이 약간 장황한 경우 일부 도우미 기능이 포함되어 있습니다.

Backslashes에서 Windows를 사용한다고 가정하면 Python에서 .bat 파일을 작성한 다음 os.system() 그것에. 해킹입니다.

문자열에서 ''를 사용할 때 그들이 제대로 탈출하고 있는지 확인하십시오.

Python은 ''를 탈출 문자로 사용하므로 문자열 "..\folder\filename" 평가합니다 "..folderfilename" 탈출 된 f는 여전히 f이기 때문에.

당신은 아마 사용하고 싶을 것입니다

r"..\folder\filename"

또는

"..\\folder\\filename"

나는 같은 메시지를 받았지만 명령이 그렇게 길지 않았기 때문에 (130 자)가 작동했기 때문에 이상했다. 방금 명령 창을 닫고 새 창을 열었습니다. 명령 창을 오랫동안 열었습니다 (아마도 몇 달, 원격 가상 머신 일 것입니다). 버퍼 나 무언가가있는 Windows 버그라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top