【发布时间】:2017-01-31 09:22:40
【问题描述】:
我正在尝试使用 python 启动一个窗口。我已经用 os.system、subprocess.call、os.startfile 等尝试过无数种方法,但我总是收到一条错误消息,提示路径不存在。
我知道路径是正确的,因为我尝试在 CMD.EXE 中运行以下命令:
start D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk
以下是我尝试过但没有成功的一些东西:
os.startfile(r"D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk")
os.startfile("D:\\johan\\programmering\\Scripts\\shortcuts\\HWMonitor.lnk")
subprocess.call("D:\\johan\\programmering\\Scripts\\shortcuts\\HWMonitor.lnk")
subprocess.call(r"D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk")
subprocess.Popen(r"D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk")
subprocess.Popen(r"D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk", shell=True)
os.system(r"start D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk")
p= subprocess.Popen(r"start D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk", shell=True)
p.wait()
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(r"D:\johan\programmering\Scripts\shortcuts\HWMonitor.lnk")
subprocess.call(shortcut.Targetpath)
免责声明我知道在 SO 上有类似的问题,但没有一个对我有帮助。所以在你开始喊“重复!”之前请知道我已经尝试了没有成功的解决方案。
【问题讨论】:
-
@Aaron 已经尝试过了。
-
@Aaron 我现在已将我的尝试添加到问题中。我做错了什么?
-
os.startfile应该可以工作,subprocess.Popen和shell=True的朋友也应该可以工作——因为在这两种情况下,您最终都会调用ShellExecute[Ex],即了解如何打开 .lnk 文件的 shell API .CreateProcess(由Popen调用)对 .lnk 快捷方式一无所知,因此,如果您需要使用带有Popen而没有shell=True的快捷方式(并且仅在这种情况下),那么您必须提取使用 shell COM 接口的快捷方式中的目标和工作目录。 -
尝试通过
subprocess.call直接运行可执行文件,通过C:和D:驱动器路径,有和没有shell=True。例如,subprocess.call([r'C:\Program Files (x86)\CPUID\HWMonitor\HWMonitor.exe'])。