如何在 Python 中打开任何程序?

Posted

技术标签:

【中文标题】如何在 Python 中打开任何程序?【英文标题】:How to open any program in Python? 【发布时间】:2018-07-07 02:46:49 【问题描述】:

好吧,我搜索了很多,发现了在 python 中打开程序的不同方法,

例如:-

import os
os.startfile(path) # I have to give a whole path that is not possible to give a full path for every program/software in my case.

我目前正在使用的第二个

import os
os.system(fileName+'.exe')

第二个例子中的问题是:-

    如果我想打开计算器,那么它的 .exe 文件名是 calc.exe 并且任何其他程序也会发生这种情况(而且我不知道每个程序的所有 .exe 文件名)。 假设如果我将每个程序名称都写成硬编码,那么如果用户安装了任何新程序会怎样。 (我的程序无法打开那个程序?)

如果没有其他方法可以在 python 中打开程序,那么是否可以获取用户计算机中所有安装程序的列表。 还有 .exe 文件名(比如:- 计算器是 calc.exe 你明白了)。

如果你想看看code

注意:我想要通用解决方案。

【问题讨论】:

Calling an external command in Python的可能重复 您似乎在这里问了几个问题:1) 如何在没有完整路径或不知道它是否以“exe”结尾的情况下启动程序? 2) 如何获取已安装程序的列表?这里的问题是,综合起来这个问题太宽泛了。您会看到为后者扫描文件系统的幼稚尝试,但您不应该将其用作解决方案。您可以使用 subprocess.call() 但传递 shell=True 让它查看 PATH 和 COMSPEC。你真的应该缩小问题的范围。你想实现什么? 我正在尝试在用户 PC 中获取所有已安装的程序,并随时调用它们。但不想手动执行,比如我不想给出硬编码的路径或 .exe 文件名,如果可能的话? 我建议不要这样做。你永远不知道随机可执行文件能做什么。它可能导致数据损坏、数据丢失、可能包含病毒、可能是用户不想运行的服务等。我会重新考虑你的策略。对不起! 是的,我能理解,但我会在运行前检查可执行文件。 :) 我不只是要运行我只需要它们的所有 .exe 文件。 【参考方案1】:

总会有的:

from subprocess import call
call(["calc.exe"])

这应该允许您使用 dict 或 list 或 set 来保存您的程序名称并随意调用它们。这在 David Cournapeau 和 chobok 的 this answer 中也有介绍。

【讨论】:

看来你没有读完我的整个问题(我想要那个自动化的) 我确实阅读了你的整个问题。它的自动化部分应该不难弄清楚。使用 dict 或列表列表,您可以通过 tkinter 接口、PyQT 接口、wxPython 或命令行轻松地根据您希望如何与它交互来自动化它。如果您不确定如何执行此操作,您可能需要查看 os 模块以及如何跟踪程序目录。 Python 会将所有这些值作为字符串提取到您的程序中,这些字符串可以通过各种类型的数据结构(dict、list、set、tuple 等)轻松传递。你的问题很广泛 @RajnishRajput 你没有提到任何关于自动化或你想要自动化的东西。【参考方案2】:

你可以试试 os.walk :

import os

exe_list=[]

for root, dirs, files in os.walk("."):
 #print (dirs)
 for j in dirs:
  for i in files:
   if i.endswith('.exe'):
     #p=os.getcwd()+'/'+j+'/'+i
     p=root+'/'+j+'/'+i
     #print(p)
     exe_list.append(p)


for i in exe_list :
  print('index :  file :'.format(exe_list.index(i),i.split('/')[-1]))

ip=int(input('Enter index of file :'))

print('executing ...'.format(exe_list[ip]))
os.system(exe_list[ip])
    os.getcwd()+'/'+i 将文件路径添加到从根目录开始的 exe 文件中。 exe_list.index(i),i.split('/')[-1] 仅获取 filename.exe exe_list 在每个索引处存储exe 文件的完整路径

【讨论】:

仍然得到一个空白数组,因为当我输入索引 0 时它给了我IndexError: list index out of range for i in exe_list : print('index : file :'.format(exe_list.index(i),i.split('/')[-1])) 这有输出吗?【参考方案3】:

可以用winapps完成

首先安装winapps,输入:

pip install winapps

之后使用库:

# This will give you list of installed applications along with some information

import winapps 

for app in winapps.list_installed(): 
    print(app)

如果你想搜索一个应用,你可以这样做:

application = 'chrome'

for app in winapps.search_installed(application): 
    print(app)

【讨论】:

以上是关于如何在 Python 中打开任何程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在应用程序中打开任何pdf文件?

如何在 Selenium for Python 中切换到新窗口?

对于任何文档类型,如何让我的应用程序显示在 iOS 上的“打开方式...”菜单中?

如何在用户打开任何应用程序时获取其名称?

如何在wxpython应用程序的帮助下添加超链接?

如何同时运行多个webdriver python程序?