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

Mes*_*sut 84 python executable

我刚刚开始研究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")
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Ida*_*a N 41

如果使用Python 2.7或更高版本(特别是在Python 3.5之前),您可以使用以下内容:

import subprocess
Run Code Online (Sandbox Code Playgroud)
  • 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.CalledProcessError对象将在returncode属性中包含返回代码

例: 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

  • Python 3.6.3推荐[run()](https://docs.python.org/3.6/library/subprocess.html#subprocess.run) (6认同)

Ale*_*lli 40

那些空格真的很麻烦:-(.尝试os.chdir('C:/Documents\ and\ Settings/')使用相对路径os.system,subprocess方法或其他...

如果尽力而为试图绕过路径中的空白障碍继续失败,那么我的下一个最佳建议是避免在关键路径中出现空白.你能不能做一个空白较少的目录,复制的关键.exe文件存在,并尝试?这些破坏性破坏的空间对你的健康是绝对必要的吗?

  • @mesut,该可执行文件用来“询问”文件名的是什么?例如,如果它是自己的标准输入,则可以使用`subprocess.Popen`将所需的值通过管道输入。如果更深入(使用“控制台”输入),请尝试wexpect,http://sage.math.washington.edu/home/goreckc/sage/wexpect/。 (2认同)

小智 23

最简单的方法是:

import os
os.startfile("C:\Documents and Settings\flow_model\flow.exe")
Run Code Online (Sandbox Code Playgroud)

有用; 我尝试过这个.

  • 不起作用:`模块'os'没有属性'startfile'`。(使用python3.6) (3认同)
  • 工作正常,但是有没有办法添加像-start之类的参数? (2认同)

Jon*_*lls 21

如果我是你,我会尝试在你的路径前插入一个'r'来表示它是一个原始字符串 - 然后你就不必使用正斜杠了.例如:

os.system(r"C:\Documents and Settings\flow_model\flow.exe")
Run Code Online (Sandbox Code Playgroud)


Adr*_*son 20

你的用法是正确的.我打赌你的外部程序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"')
Run Code Online (Sandbox Code Playgroud)

(注意单引号内的双引号......)


小智 10

使用子进程,它是一个较小的模块,因此运行.exe速度更快.

import subprocess
subprocess.Popen([r"U:\Year 8\kerbal space program\KSP.exe"])
Run Code Online (Sandbox Code Playgroud)

  • 你的意思是它***启动***`.exe`更快? (2认同)

小智 7

通过使用os.system:

import os
os.system(r'"C:/Documents and Settings/flow_model/flow.exe"')
Run Code Online (Sandbox Code Playgroud)