现在,我正在开发语音控制助手应用程序。
当我说“打开Google Chrome”时,它应该打开Chrome。我的语音识别没有问题,但是启动程序确实有问题。
例如,以下代码:
import os
os.system("chrome.exe")
适用于notepad.exe
或cmd.exe
程序,但是当我提供诸如chrome
之类的外部程序时,我需要给出完整的路径。
但是,在C#中,我们只能给出直接名称,例如chrome.exe
来运行程序。
所以,我的问题是,是否有任何方法可以启动外部程序而又不提供C#中的完整路径?
提供启动程序的路径将是一个严重的问题。因为当我们将程序移至另一台计算机时,我们将面临许多代码错误。
答案 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#中创建了一个控制台应用程序,该应用程序通过使用以下代码来打开Google 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