如何在 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 中打开任何程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Selenium for Python 中切换到新窗口?