在Python中运行外部程序(可执行文件)?

123 投票
15 回答
532199 浏览
提问于 2025-04-15 16:28

我刚开始学习Python,想从Python中运行一个外部的可执行文件。

我有一个用Fortran写的程序的可执行文件。假设这个可执行文件叫做 flow.exe,它的位置在 C:\Documents and Settings\flow_model。我尝试了 os.systempopen 这两个命令,但到现在为止,我还没能成功。下面的代码似乎打开了命令窗口,但并没有执行模型。

# Import system modules
import sys, string, os, arcgisscripting
os.system("C:/Documents and Settings/flow_model/flow.exe")

我该怎么解决这个问题呢?

15 个回答

50

最简单的方法是:

import os
os.startfile("C:\Documents and Settings\flow_model\flow.exe")

这个方法有效;我试过了。

56

如果你使用的是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) 这个方法也是用来运行命令的,但它会等命令执行完。如果返回的代码是零,说明执行成功,就会返回;如果不是零,就会抛出一个叫做CalledProcessError的错误。这个错误对象里会包含返回代码的信息。

举个例子:subprocess.check_call([r"C:\pathToYourProgram\yourProgram.exe", "your", "arguments", "comma", "separated"])

在普通的Python字符串中,\U这个字符组合表示一个扩展的Unicode编码点转义。

这里有文档的链接:http://docs.python.org/3.2/library/subprocess.html

对于Python 3.5及以上版本,你现在可以在很多情况下使用run()方法:https://docs.python.org/3.5/library/subprocess.html#subprocess.run

48

那些空格真是让人头疼。你可以试试用 os.chdir('C:/Documents\ and\ Settings/') 这个命令,然后在后面加上相对路径来使用 os.systemsubprocess 方法,或者其他的方式……

如果你尝试了很多方法还是无法解决路径中的空格问题,我的下一个建议就是尽量避免在重要路径中使用空格。你能不能创建一个没有空格的文件夹,把重要的 .exe 文件复制到那里,然后试试这个?那些让你烦恼的空格真的对你来说那么重要吗……?

撰写回答