0

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

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,它可以正常工作。

不知道出了什么问题。

4

2 回答 2

5

从文档中:

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

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

p = Popen(path_to_program, cwd=head, shell=False)
于 2012-07-24T17:19:56.980 回答
1

Popen的Python 文档对 cwd 参数进行了说明:

请注意,搜索可执行文件时不考虑此目录,因此您不能指定程序相对于cwd.

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

p = Popen(path_to_program, cwd=head, shell=False)
于 2012-07-24T17:22:33.797 回答