2016-12-16 74 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

相關問題