Popen与关键字cwd导致Windows错误2

时间:2012-07-24 17:09:05

标签: python windows

我有一段代码,它接受用户提供的可执行文件或批处理文件的路径。我拆分路径以获取文件名和路径(尾部和头部),并使用head作为新进程的当前工作目录。如果路径不包含目录,则可以正常工作。但是,如果出现以下情况,我会收到以下错误:

WindowsError: [Error 2] The system cannot find the file specified

示例代码:

def poop(self, path_to_program):
    head, tail = path.split(path_to_program)
    if(head.startswith('"')):
        head = head.strip('"')

    if(tail.endswith('"')):
        tail = tail.strip('"')                

    if(head<>''):
        p = Popen(tail, cwd=head, shell=False)
    else:
        p = Popen(tail)

如果path_to_program没有拆分并直接传递给Popen,那么它可以正常工作。

不确定是什么问题。

2 个答案:

答案 0 :(得分:5)

来自文档:

  

如果cwd不是None,则子节点的当前目录在执行之前将更改为cwd。请注意,在搜索可执行文件时不考虑此目录,因此您无法指定程序相对于cwd的路径。

正在发生的事情是cwd是执行可执行文件的目录。它是 NOT 子进程查找可执行文件的目录。你可能想要的是:

p = Popen(path_to_program, cwd=head, shell=False)

答案 1 :(得分:1)

Popen的Python documentation说了关于cwd的论点:

  

请注意,搜索可执行文件时不会考​​虑此目录,因此您无法指定程序相对于cwd的路径。

所以我认为在head不是空字符串的情况下,您需要将Popen称为:

p = Popen(path_to_program, cwd=head, shell=False)