尝试运行时,我一直收到“找不到文件”错误。为什么不找到并指定绝对路径?这是我的代码:
file = "/" + arr[2] + ".exe"
print(file)
path = os.path.abspath(file)
print(path)
subprocess.Popen(path)
localtime = time.asctime(time.localtime(time.time()))
print(arr[2] + " opened at " + localtime + "\n")
这是输出的内容:
/firefox.exe
C:\firefox.exe
Traceback (most recent call last):
File "C:\Python33\lib\subprocess.py", line 1090, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
我正在尝试以编程方式找到基于用户输入打开程序...也许我正在以错误的方式进行,但这是有人建议这样做的。 Firefox.exe应位于C:/ Program Files / Firefox / firefox.exe
任何帮助都会很棒!谢谢!
答案 0 :(得分:3)
尝试在Windows上打开程序的一个解决方案是从C:/ Program files /和C:/ Program Files(x86)的基目录开始搜索所有文件夹。对此的简单解决方案可能如下所示:
for program_files in (os.path.join("C:", "Program\ Files"), os.path.join("C:", "Program\ Files\ (x86)"):
for dir in os.listdir(program_files):
if os.path.exists(os.path.join(program_files, dir, arr[2]) + ".exe"):
subprocess.Popen(os.path.join(program_files, dir, arr[2]) + ".exe")
这只将一个目录下载到Program Files目录中,但它至少应该给出需要完成的工作的要点,并为大多数情况提供简单的解决方案。我认为大多数程序都倾向于将其可执行文件保存在第一个目录下。
快速注意:如果您要创建一个可以在32位和64位版本的Windows上运行的应用程序,您需要对Program Files(x86)目录或某种类型的目录进行某种检查。检查32对64位Windows。该文件夹仅存在于64位版本的Windows上。
另外:你的方法不起作用的原因是因为你得到了/ firefox.exe的abspath,它在Unix系统上表示计算机上的最低级别目录。在Windows上,那将是C:/。 Python通常以Unix-ey的方式工作,因此它假设您需要系统的根目录。
答案 1 :(得分:0)
一旦我找到了路径,这就是我启动程序的方式,但文件行走/搜索算法超出了这个问题的范围。
#load this from a setting file later
programDict = {'firefox': r"C:/Program Files/Firefox/firefox.exe"}
if sys.argv[2] in programDict:
subprocess.Popen(path)