[python] Python에서 외부 프로그램 (실행 가능)을 실행하고 있습니까?

방금 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.systemsubprocess

최선의 노력이 경로의 공백 장애물을 우회하려는 시도가 계속 실패하면 다음 최선의 제안은 중요한 경로에 공백 을 피하는 것 입니다. 공백없는 디렉토리를 만들고 .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"])


답변

os.system 사용 :

import os
os.system(r'"C:/Documents and Settings/flow_model/flow.exe"')