1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python运行外部程序_在Python中运行外部程序(可执行文件)?

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

时间:2019-10-01 20:26:03

相关推荐

python运行外部程序_在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")

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

Mesut asked -06-11T19:42:19Z

14个解决方案

37 votes

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

import subprocess

subprocess.check_call([r"C:\pathToYourProgram\yourProgram.exe", "your", "arguments", "comma", "separated"])运行args描述的命令。 等待命令完成,然后返回returncode属性。

subprocess.check_call([r"C:\pathToYourProgram\yourProgram.exe", "your", "arguments", "comma", "separated"])用参数运行命令。 等待命令完成。 如果返回码为零则返回,否则引发CalledProcessError。 CalledProcessError对象将在returncode属性中包含返回代码

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

在常规Python字符串中,\ U字符组合表示a 扩展的Unicode代码点转义。

以下是文档的链接:[/3.2/library/subprocess.html]

对于Python 3.5+,您现在可以在许多情况下使用run():[/3.5/library/subprocess.html#subprocess.run]

Ida N answered -06-11T19:43:45Z

35 votes

那些空格真的很麻烦:-(。尝试.exe,然后是os.system,subprocess方法的相对路径,或者其他......

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

Alex Martelli answered -06-11T19:42:40Z

19 votes

最简单的方法是:

import os

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

有用; 我尝试过这个。

Someone answered -06-11T19:44:12Z

18 votes

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

os.system(r"C:\Documents and Settings\flow_model\flow.exe")

Jon Mills answered -06-11T19:44:36Z

18 votes

你的用法是正确的。 我打赌你的外部程序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"')

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

Adrien Plisson answered -06-11T19:45:14Z

8 votes

使用子进程,它是一个较小的模块,因此它可以更快地运行.exe。

import subprocess

subprocess.Popen([r"U:\Year 8\kerbal space program\KSP.exe"])

Frodo Baggins answered -06-11T19:45:39Z

6 votes

通过使用os.system:

import os

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

romy answered -06-11T19:46:04Z

3 votes

尝试

import subprocess

subprocess.call(["C:/Documents and Settings/flow_model/flow.exe"])

int3 answered -06-11T19:46:23Z

1 votes

这是否试图执行subprocess.call()参数为"and", "Settings/flow_model/flow.exe"?

另外,您可以考虑subprocess.call()。

Thanatos answered -06-11T19:46:55Z

1 votes

如果是我,我会将EXE文件放在根目录(C :)中,看看它是否有效。 如果是这样,它可能是目录名中的(已经提到的)空格。 如果不是,则可能是某些环境变量。

另外,尝试检查stderr(使用int3的早期答案):

import subprocess

process = subprocess.Popen(["C:/Documents and Settings/flow_model/flow.exe"], \

stderr = subprocess.PIPE)

if process.stderr:

print process.stderr.readlines()

代码可能不完全正确,因为我通常不使用Popen或Windows,但应该给出这个想法。 可能是错误消息在错误流上。

extraneon answered -06-11T19:47:35Z

0 votes

这是正确的用法,但也许路径名中的空格由于某种原因弄乱了。

您可能还希望在cmd.exe下运行该程序,以便可以看到flow.exe中可能指示错误的任何输出。

Dan Olson answered -06-11T19:48:07Z

0 votes

对于上述问题,此解决方案有效。

只需更改可执行文件所在的路径即可。

import sys, string, os

os.chdir('C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\\bin64')

os.system(r"C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\bin64\\flowwork.exe)

'''import sys, string, os

os.chdir('C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\\bin64')

os.system(r"C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\bin64\\pdftopng.exe test1.pdf rootimage")'''

这里test1.pdf rootimage是我的代码。

spurthi answered -06-11T19:48:46Z

0 votes

import os

path = "C:/Documents and Settings/flow_model/"

os.chdir(path)

os.system("flow.exe")

John answered -06-11T19:49:04Z

0 votes

有许多不同的解决方案,结果将强烈依赖于:

您正在使用的操作系统:Windows,Cygwin,Linux,MacOS

您正在使用的python版本:Python2或Python3x

因为我发现了一些声称仅在Windows中工作的东西,但是,可能是因为我碰巧使用Cygwin,这超出了操作系统处理Windows路径的方式。 其他东西只适用于基于纯* nix的操作系统或Python2或3。

以下是我的发现:

一般来说,explorer是最宽容的方法。

explorer是最不宽容的。 (仅限Windows,如果你很幸运,还有&&)

explorer不推荐

推荐的方式是explorer!

请记住,对任何事物使用explorer可能会带来安全隐患。

试试这些:

import os, subprocess

...

winView = '/cygdrive/c/Windows/explorer.exe %s' % somefile

...

# chose one of these:

os.system(winView)

subprocess.Popen(['/cygdrive/c/Windows/explorer.exe', 'somefile.png'])

subprocess.run(winView, shell=True)

问:为什么要在Windows中使用explorer?

答:因为如果您只想查看某些新文件的结果,资源管理器将自动打开该文件,其中包含您为该文件类型设置的任何默认Windows程序。 因此无需重新指定要使用的默认程序。

not2qubit answered -06-11T19:50:46Z

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。