하위 프로세스.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=True
Windows에서는 실행하려는 명령이 셸에 내장된 경우(예: 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
'programing' 카테고리의 다른 글
VB.NET에서 개체 유형에 대한 대/소문자 선택 (0) | 2023.05.26 |
---|---|
NSLayoutConstraint의 승수 속성을 변경할 수 있습니까? (0) | 2023.05.26 |
클릭 버튼 클립보드에 복사 (0) | 2023.05.26 |
연결 문자열이 올바른 동안 'vmx failure' 오류가 발생했습니다. (0) | 2023.05.26 |
특정 Git 태그를 복제하는 방법 (0) | 2023.05.26 |