(填写评论的详细信息以做出单独的答案)
首先,无论您做什么,都不会在任何PATH中检查相对路径(包含斜杠的路径)。它们仅相对于 当前工作目录 。如果您需要解析相对路径,则必须手动搜索PATH,或者对PATH进行修改以使其包含子目录,然后按照下面的建议使用命令名即可。
如果要 相对于Python脚本的位置 运行程序,请使用__file__
并从那里查找程序的绝对路径,然后使用中的绝对路径Popen
。
其次,Python错误跟踪器中存在一个有关Python如何处理裸命令(无斜杠)的问题。基本上,在UNIX / MacPopen
使用os.execvp
时调用shell=False
,它看起来在其价值的手段PATH
,因为它是在Python的推出 也没有改变的量os.environ
会帮你解决这个问题。此外,在带有的Windows上shell=False
,它根本不关注PATH,而只会相对于当前工作目录进行查找。
如果您只需要路径评估,而又不是真的想通过shell运行命令行,并且在UNIX上,建议您使用env
代替shell=True
,如中所述Popen(['/usr/bin/env', 'progtorun', other, args], ...)
。这使您可以将不同的PATH传递给env
进程,该进程将使用它来查找程序。它还避免了外壳元字符的问题和通过外壳传递参数的潜在安全问题。显然,在Windows(几乎是唯一没有的平台/usr/bin/env
)上,您将需要做一些不同的事情。