我有一个文件并像命令一样启动它(没有完整路径):
os.system('start rvpush')
或
os.system('start rvpush.exe')
两个都开始记事本。但是,如果我删除该文件,它将停止工作并生成错误。一切都合乎逻辑......
这是一个问题。在开始之前,我需要检查文件是否存在。但我不知道文件的存储位置。
os.path.exists('rvpush.exe')
return:False ...但文件存在并启动...
我尝试从os.environ['PATH']
获取文件夹,但在这些文件夹中找不到该文件...
我很困惑。该文件已启动并正常运行,但在PATH
环境中没有文件路径...如果您不知道他的路径,如何检查文件?
PS:任务是检查文件是否存在然后运行它。我不确定所有计算机都有此文件,应该在开始之前进行检查。所以我不确定文件是否在同一个地方,所以只能用作命令而不是完整路径。除了电脑可以是windows或linux ......
PSS:光盘有很多文件夹,所以选择只检查整个磁盘来搜索文件是不合适的(可能需要很长时间)。
答案 0 :(得分:0)
try:
os.system('start rvpush.exe')
except IOError as e:
# log the error somehow, e.g. logging.warning(e)
# do whatever you need to do here if the file doesn't exist
答案 1 :(得分:0)
回到我的初始评论..任何给定终端找到给定二进制文件的方式是从PATH
变量开始,并递归查看路径中每个文件夹中的每个文件..(in * nix这通常包括\ bin和\ usr \ bin等。)这与预先定义一些可能的地方以查看并详尽地检查所有文件以查看它是否存在没有什么不同。许多程序会在安装时将自己添加到路径中,以便系统能够找到它们,但是如果你只是在任何旧文件夹中都有一个随机可执行二进制文件。除了彻底检查之外,没有办法找到它。
尽管如此,详尽地检查可能并不像你想的那么糟糕......通过一些合理的检查和平衡,你可以在相对较短的时间内列举所有可能的地方。 Python相当慢,我能够在大约6秒钟内在程序文件和程序文件(x86)文件夹中枚举近30K文件名。
import os
from time import time
t = time()
executables = 0
total = 0
for root, dirs, files in os.walk('C:/Program Files/'):
total += len(files)
executables += sum(file.endswith('.exe') for file in files)
for root, dirs, files in os.walk('C:/Program Files (x86)/'):
total += len(files)
executables += sum(file.endswith('.exe') for file in files)
print 'found {} executables of {} files in {} seconds'.format(executables, total, time()-t)
打印:
>>>runfile('C:/Users/**/untitled0.py', wdir='C:/Users/**/python/test') found 633 executables of 29301 files in 6.16199994087 seconds
我只测试了这一种方法,并且可以想象你可以找到一种更快的方法来同时获取所有文件名,然后可能使用正则表达式找到你正在寻找的东西。此外,我会将位置保存在某种配置文件中以供将来查找。在安装期间进行初始搜索,并提供某种加载/安装动画来安抚用户。