2017-08-15 103 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")