2016-12-16 55 views
0

我有一个文件,并像一个命令来启动它(不完整路径):如果你不知道他的路径,如何检查一个文件?

os.system('start rvpush') 

os.system('start rvpush.exe') 

两个启动记事本。但是,如果我删除该文件,它将停止工作并产生一个错误。一切都是合乎逻辑的...

这是一个问题。在我开始之前,我需要检查文件是否存在。但我不知道文件的存储位置。

os.path.exists('rvpush.exe') 

回报:假...但文件是否存在,并开始...

我尝试从os.environ['PATH']获取文件夹,但该文件没有在这些文件夹中找到...

我米困惑。该文件启动和工作,但在PATH环境中没有文件路径...如果你不知道他的路径,如何检查一个文件?

PS:任务是检查文件是否存在,然后运行它。我不确定所有计算机都有这个文件,应该在开始之前检查。所以我不确定这个文件是否在同一个地方,所以只用作命令而不是完整的路径。除了计算机可以是Windows或Linux ...

PSS:该光盘有很多文件夹,以便选择只检查整个磁盘在搜索该文件是不适合的(它可能需要很长的时间时间)。

+0

你需要多种操作系统的兼容性吗? 'rvpush.exe'看起来像是通过调整软件从RV得到的,它通常会安装到''C:\ Program Files(x86)“'文件夹(比整个磁盘的搜索空间小得多) – Aaron

+0

我知道我的位置电脑上安装了rvpush.exe。并且你还没有猜到路径......)我的路径是:C:\ Program Files \ Shotgun \ RV-7.1.1 \ bin \ rvpush.exe - 我使用霰弹枪的版本。但另一个用户可以使用独立版本。和另一个更改默认位置或其他东西...例如我有一个版本号列出的文件夹名称...我不想关心RV的用户路径...我想要启动它,如果它注册系统像一个简单的命令... – MaxKu

回答

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 
+0

它有另一个问题:https://s29.postimg.org/krcxpswdz/Capture.png – MaxKu

+0

它的一个问题。我不想用系统中的黑色窗口和错误消息来吓唬用户)我搜索安静版本的检查 – MaxKu

0

回到我最初的意见..顺便任何给定的终端会找到一个给定的二进制运行与PATH变量开始,递归地看着路径中的每个文件夹中的所有文件。(在* nix通常包括\ bin和\ usr \ bin等)。这与预先定义一些可能的位置来查看并详尽地检查所有文件以查看它是否在那里没有什么不同。许多程序会在安装时将自己添加到路径中,以便系统能够找到它们,但是如果您只是在任何旧文件夹中都有一个随机可执行二进制文件。除了彻底检查外,没有办法找到它。

也就是说,详尽的检查可能不会像你想象的那么糟糕。通过一些合理的检查和平衡,你可能会在相对较少的时间内列举所有可能的地方。 Python是相当缓慢的,我能枚举在我的两个程序文件和程序文件(x86)的文件夹几乎30K的文件名在大约6秒..

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

我只测试这一个方法,可以想象你可以找到一个更快的方法来一次抓取所有的文件名,然后可能使用正则表达式来找到你要找的东西。另外,我会将这个位置保存在某种配置文件中,以便将来查找。在安装过程中进行初始搜索,并提供某种加载/安装动画来安抚用户。

+0

它花了我63秒。它太长了。我不能强迫用户等待一分钟,然后运行几秒钟(( – MaxKu

+0

)老实说,程序要求用户自己定位插件并不罕见(也就是说:定位lame和ffmpeg的大胆),63秒听起来像是你的文件数量过多或者你的存储介质出了问题......对于那些只发生一次的事情,5-10秒就不会太糟糕。另外,如果你使用的是python 3 .x你应该查看[this](https://www.python.org/dev/peps/pep-0471/)关于'os.walk'的速度 – Aaron