방금 Python 작업을 시작했고 Python에서 외부 실행 파일을 실행하려고했습니다.
Fortran으로 작성된 프로그램의 실행 파일이 있습니다. 실행 파일의 이름이 flow.exe라고 가정 해 보겠습니다. 그리고 내 실행 파일은 C:\Documents and Settings\flow_model
. os.system과 popen 명령을 모두 시도했지만 지금까지 작동하지 못했습니다. 다음 코드는 명령 창을 여는 것처럼 보이지만 모델을 실행하지 않습니다.
# Import system modules
import sys, string, os, arcgisscripting
os.system("C:/Documents and Settings/flow_model/flow.exe")
이 문제를 어떻게 해결할 수 있습니까?
답변
그 공백은 정말 귀찮을 수 있습니다 :-(. , 메서드 또는 기타에 os.chdir('C:/Documents\ and\ Settings/')
대한 상대 경로를 따라 시도하십시오 …os.system
subprocess
최선의 노력이 경로의 공백 장애물을 우회하려는 시도가 계속 실패하면 다음 최선의 제안은 중요한 경로에 공백 을 피하는 것 입니다. 공백없는 디렉토리를 만들고 .exe
거기에 중요한 파일을 복사 한 다음 시도해 볼 수 없습니까? 그 파괴적인 공간은 당신의 웰빙에 절대적으로 필수적인 것입니까 …?
답변
Python 2.7 이상 (특히 Python 3.5 이전)을 사용하는 경우 다음을 사용할 수 있습니다.
import subprocess
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
args로 설명 된 명령을 실행합니다. 명령이 완료 될 때까지 기다린 다음 returncode 속성을 반환합니다.subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
인수를 사용하여 명령을 실행합니다. 명령이 완료 될 때까지 기다립니다. 반환 코드가 0이면 반환하고, 그렇지 않으면 CalledProcessError를 발생시킵니다. CalledProcessError 객체는 returncode 속성에 반환 코드를 갖습니다.
예: subprocess.check_call([r"C:\pathToYourProgram\yourProgram.exe", "your", "arguments", "comma", "separated"])
일반 Python 문자열에서 \ U 문자 조합은 확장 된 유니 코드 코드 포인트 이스케이프를 나타냅니다.
다음은 문서 링크입니다. http://docs.python.org/3.2/library/subprocess.html
Python 3.5 이상에서는 이제 많은 경우에 run ()을 사용할 수 있습니다. https://docs.python.org/3.5/library/subprocess.html#subprocess.run
답변
가장 간단한 방법은 다음과 같습니다.
import os
os.startfile("C:\Documents and Settings\flow_model\flow.exe")
효과가있다; 나는 그것을 시도했다.
답변
내가 당신이라면 경로 앞에 ‘r’을 삽입하여 원시 문자열임을 나타내려고합니다. 그러면 슬래시를 사용할 필요가 없습니다. 예를 들면 :
os.system(r"C:\Documents and Settings\flow_model\flow.exe")
답변
귀하의 사용법이 정확합니다. 외부 프로그램 인 flow.exe는 거기에 저장된 일부 외부 파일에 액세스하기 때문에 해당 디렉터리에서 실행되어야합니다.
따라서 시도해 볼 수 있습니다.
import sys, string, os, arcgisscripting
os.chdir('c:\\documents and settings\\flow_model')
os.system('"C:\\Documents and Settings\\flow_model\\flow.exe"')
(작은 따옴표 안에있는 큰 따옴표에주의하십시오 …)
답변
subprocess를 사용 하면 더 작은 모듈이므로 .exe
더 빨리 실행됩니다 .
import subprocess
subprocess.Popen([r"U:\Year 8\kerbal space program\KSP.exe"])