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

如何在Python中打开任何程序?,python,python-3.x,python-2.7,operating-system,Python,Python 3.x,Python 2.7,Operating System,我搜索了很多,找到了用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') 在第二个例子中,问题是:- 如果我想打开calculato

我搜索了很多,找到了用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')
在第二个例子中,问题是:-

  • 如果我想打开calculator,使其
    .exe
    文件名为
    calc.exe
    ,这也适用于任何其他程序(我不知道每个程序的所有.exe文件名)
  • 假设我写的每个程序名都是硬编码的,那个么若用户安装了任何新程序呢。(我的程序无法打开该程序?)
  • 若并没有其他方法在python中打开程序,那个么就有可能获得用户计算机中所有安装程序的列表。 还有.exe文件名(比如:-calculator is
    calc.exe
    你明白了)

    如果你想看看

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

    总有:

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

    这应该允许您使用dict、list或set来保存程序名并随意调用它们。David Cournapeau和chobok也介绍了这一点。

    您可以尝试使用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\u list在每个索引处存储
    exe
    文件的整个路径
  • 可以通过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)
    

    看来你没有读我的全部问题(我想自动化),我读了你的全部问题。它的自动化部分应该不那么难理解。使用dict或列表列表,您可以根据您希望如何通过tkinter接口、PyQT接口、wxPython或命令行与之交互,轻松地实现自动化。如果您不确定如何做到这一点,您可能需要查看操作系统模块以及如何跟踪程序目录。Python将把所有这些值作为字符串拉入程序,这些字符串很容易通过各种类型的数据结构(dict、list、set、tuple等)传递。你的问题很难回答broad@RajnishRajput您没有提到任何关于自动化的内容,也没有提到您希望自动化的内容。可能重复的内容看起来您在这里问了几个问题:1)如何在没有完整路径或不知道程序是否以“exe”结尾的情况下启动程序?2) 如何获取已安装程序的列表?这里的问题是,这是一个过于宽泛的问题。您将看到扫描文件系统以查找后者的幼稚尝试,但不应将其用作解决方案。您可以使用subprocess.call()但传递shell=True以使其查看路径和COMSPEC。你应该把问题缩小范围。你们想实现什么?我想把所有安装的程序都放到用户电脑里,并随时给他们打电话。但如果可能的话,我不想手动执行,就像我不想给路径或.exe文件名硬编码一样?我建议不要这样做。你永远不知道一个随机的可执行文件能做什么。它可能导致数据损坏、数据丢失、可能包含病毒、可能是用户不想运行的服务等。我会重新考虑您的策略。很抱歉是的,我可以理解,但我会在运行前检查可执行文件。:)我不会只运行所有的.exe文件,我只需要它们。仍然会得到一个空白数组,因为当我放入索引0时,它给了我
    索引器:列表索引超出范围
    对于exe列表中的I:print('index:{}文件:{})。format(exe_list.index(I),I.split('/')[-1])
    这会给出任何输出吗?