programing

하위 프로세스.call()에서 파일을 찾을 수 없습니다.

muds 2023. 5. 26. 22:49
반응형

하위 프로세스.call()에서 파일을 찾을 수 없습니다.

다음 오류가 발생합니다.

WindowsError: [Error 2] The system cannot find the file specified

내 코드는:

subprocess.call(["<<executable file found in PATH>>"])

윈도우 7, 64비트.Python 3.x 최신 버전, 안정적입니다.

아이디어 있어요?

감사해요.

명령이 셸 기본 제공인 경우 다음을 추가합니다.shell=True필요할 때까지

예를 들어dir다음을 입력합니다.

import subprocess
subprocess.call('dir', shell=True)

설명서에서 인용하기:

지정해야 하는 유일한 시간shell=TrueWindows에서는 실행하려는 명령이 셸에 내장된 경우(: dir 또는 copy)입니다.필요 없습니다.shell=True배치 파일 또는 콘솔 기반 실행 파일을 실행합니다.

Windows에서는 사용자가 통과하지 않는모듈이 표시되지 않습니다.CreateProcess()막후에서하지만,shell=True프로그램 외부에서 발생할 수 있는 인수를 전달하는 경우 보안 위험이 될 수 있습니다.만들기 위해서subprocess그럼에도 불구하고 올바른 실행 파일을 찾을 수 있다면 을 사용할 수 있습니다.의 실행 파일을 가정해 보겠습니다.PATH이름이 지정됨frob:

subprocess.call([shutil.which('frob'), arg1, arg2])

(이것은 Python 3.3 이상에서 작동합니다.)

윈도우즈에서는 cmd.exe를 통해 호출해야 합니다.Apalala에서 언급했듯이 윈도우즈 명령은 별도의 실행 파일이 아닌 cmd.exe로 구현됩니다.

예.

subprocess.call(['cmd', '/c', 'dir'])

/c는 cmd에게 다음 명령을 실행하도록 지시합니다.

셸 주입을 허용하는 shell=True를 사용하는 것보다 안전합니다.

만약 당신이 파워셸을 사용하고 있다면, 그 안에 있을 것입니다.subprocess.call(['powershell','-command','dir'])POSIX 명령의 상당 부분을 지원하는 PowerShell

머리를 많이 긁은 후 C:에 위치한 파일을 실행하는 것을 발견했습니다.\Windows\64비트 시스템에서 32비트 버전의 python을 실행하는 동안 Windows가 프로세스를 능가하고 호출을 C:로 리디렉션하려고 하므로 시스템32\는 잠재적인 문제입니다.\Windows\시스템 32에서 C:\Windows\SysWOW64.

http://code.activestate.com/recipes/578035-disable-file-system-redirector/ 에서 이 문제를 해결하는 방법의 예를 찾았습니다.

설명서에서 인용하기:

"Python 3.5 이전에는 이 세 가지 기능이 고급 API to 하위 프로세스로 구성되었습니다.이제 많은 경우에 run()을 사용할 수 있지만, 많은 기존 코드가 이러한 함수를 호출합니다."

SO: subprocess.call 대신 subprocess.run for Python 3.5 이상을 사용합니다.

제가 PHP를 호출하는 동안 같은 문제가 발생했습니다.그 이유는 PHP가 PATH에 없어서 PHP 명령을 찾을 수 없기 때문입니다.그러나 PowerShell은 현재 위치에 존재한다는 것을 발견하고 'PHP'를 '로 대체할 것을 제안합니다.\이 명령을 신뢰하는 경우 'PHP'.그러면 잘 달립니다.

언급URL : https://stackoverflow.com/questions/3022013/windows-cant-find-the-file-on-subprocess-call

반응형