如何在Python中运行外部程序而不使用整个路径?

时间:2019-04-03 18:17:40

标签: python python-3.x

现在,我正在开发语音控制助手应用程序。

当我说“打开Goog​​le Chrome”时,它应该打开Chrome。我的语音识别没有问题,但是启动程序确实有问题。

例如,以下代码:

import os
os.system("chrome.exe")

适用于notepad.execmd.exe程序,但是当我提供诸如chrome之类的外部程序时,我需要给出完整的路径。

但是,在C#中,我们只能给出直接名称,例如chrome.exe来运行程序。

所以,我的问题是,是否有任何方法可以启动外部程序而又不提供C#中的完整路径?

提供启动程序的路径将是一个严重的问题。因为当我们将程序移至另一台计算机时,我们将面临许多代码错误。

4 个答案:

答案 0 :(得分:0)

此答案的第一部分是特定于操作系统的,不能用代码或python解决

将Chrome存在的路径添加到您的PATH变量中(您可能需要重新启动),然后在执行诸如chrome.exe之类的命令时,它将尝试从该路径运行它位置

更新: 如果要对绝对路径进行搜索,可以在路径列表How do I list all files of a directory?

上找到一些不错的资源。

但是同样,您可能需要一些有根据的猜测,并且需要做一些特定于操作系统的事情才能找到它。

Chrome二进制文件通常安装在同一位置

答案 1 :(得分:0)

PATH系统变量像在外部一样在Python内部进行控制。如果要从Python进行修改,则为os.environ

顺便说一句,更好的解决方案可能是使用subprocess文档中建议的os.system

PATH的操作将完全相同。

import os
import subprocess

os.environ['PATH'] = os.environ['PATH'] + r';c:\google\chrome\'
subprocess.run(['chrome.exe'])

...显然,您需要在其中将包含chrome.exe的目录添加到PATH

即使在您的方案中运行Python之前,您可能也要确保PATH是正确的。

答案 2 :(得分:0)

我通过使用C#解决了这个问题。就像我已经提到的,我们可以在C#中直接调用“ chrome.exe”之类的程序。我在C#中创建了一个控制台应用程序,该应用程序通过使用以下代码来打开Goog​​le Chrome。然后,我将该控制台应用程序编译为.exe,然后将该exe文件与python程序链接。

C#

Process ExternalProcess = new Process();
ExternalProcess.StartInfo.FileName = "chrome.exe";
ExternalProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
ExternalProcess.Start();
ExternalProcess.WaitForExit();

Python

import os
os.system('console_application.exe')

答案 3 :(得分:-1)

尝试os.path.abspath

os.path.abspath("chrome.exe")

返回以下内容: C:\ Users \您的名字\ chrome.exe