我有一段代码,它接受用户提供的可执行文件或批处理文件的路径。我拆分路径以获取文件名和路径(尾部和头部),并使用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,那么它可以正常工作。
不确定是什么问题。
答案 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)