2017-08-15 52 views
1

我在製作應該在不同計算機上運行的GUI。在腳本中,我需要打開一個外部程序並通過這個程序運行一個宏。我正在使用子進程來執行此操作。問題是,如果沒有對路徑進行硬編碼,我無法找到該程序。我無法對路徑進行硬編碼,因爲程序可能位於不同計算機上的不同目錄中。這可能嗎?啓動外部程序,不對路徑進行硬編碼

代碼:

from subprocess import * 

def call_dos(self, program, *args): 

    proc = call([program, args]) 
    if proc: 
     logging.warning('Calling failed') 
    else: 
     logging.info('Calling successful') 

def partone(self, *args): 
    try: 
     self.call_dos("Myprogram.exe", r"C:\Mymacro.mko") 
    finally: 
     self.partone() 

錯誤消息:

Traceback: 
    'Calling failed' 

謝謝你的任何答覆!

+0

要求:「Myprogram.exe」必須位於系統路徑中。這與任何python問題無關。 –

回答

1

您必須檢查Myprogram.exe是否可調用,即在系統路徑中。

對於windows,可以在用戶或系統環境中通過將exe所在的實際目錄附加到PATH環境變量來進行設置。

爲了確保用戶不會怪你的程序爲他們安裝不良,因此錯誤是人類可讀的,你可以添加一個檢查:

import distutils.spawn 
if not distutils.spawn.find_executable("Myprogram.exe"): 
    raise Exception("{} is not in the path, add it to path and retry".format("Myprogram.exe")) 

您還可以分發程序旁邊腳本(相同的目錄),所以你確定找到了它(如果不需要深度安裝)。在這種情況下,請執行以下操作:

self.call_dos(os.path.join(os.path.dirname(__file__),"Myprogram.exe"), r"C:\Mymacro.mko")