python:Popen FileNotFoundError出现问题:[WinError 2]

时间:2016-09-01 10:57:01

标签: python

我已经搜索了一段时间但仍无法弄清楚... 这是我的代码出错的部分。

import subprocess as sp
import os
cmd_args = []
cmd_args.append('start ')
cmd_args.append('/wait ')
cmd_args.append(os.path.join(dirpath,filename))
print(cmd_args)
child = sp.Popen(cmd_args)

命令提示完成此操作。

['start ', '/wait ', 'C:\\Users\\xxx\\Desktop\\directory\\myexecutable.EXE']
Traceback (most recent call last):
  File "InstallALL.py", line 89, in <module>
    child = sp.Popen(cmd_args)
  File "C:\Python34\lib\subprocess.py", line 859, in __init__
    restore_signals, start_new_session)
  File "C:\Python34\lib\subprocess.py", line 1114, in _execute_child startupinfo)
FileNotFoundError: [WinError 2]

看起来文件路径有两个反斜杠错误。

我知道我是否

print(os.path.join(dirpath,filename))

它会返回

C:\Users\xxx\Desktop\directory\myexecutable.EXE

我确定文件在那里。 我该怎么调试呢?

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为Popen正在尝试查找文件start而不是您要运行的文件。

例如,使用notepad.exe

>>> import subprocess
>>> subprocess.Popen(['C:\\Windows\\System32\\notepad.exe', '/A', 'randomfile.txt']) # '/A' is a command line option
<subprocess.Popen object at 0x03970810>

这很好用。但是如果我把路径放在列表的末尾:

>>> subprocess.Popen(['/A', 'randomfile.txt', 'C:\\Windows\\System32\\notepad.exe'])
Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    subprocess.Popen(['/A', 'randomfile.txt', 'C:\\Windows\\System32\\notepad.exe'])
  File "C:\python35\lib\subprocess.py", line 950, in __init__
    restore_signals, start_new_session)
  File "C:\python35\lib\subprocess.py", line 1220, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

请改用:

import subprocess as sp
import os
cmd_args = []
cmd_args.append(os.path.join(dirpath,filename))
cmd_args.append('start ')
cmd_args.append('/wait ')
print(cmd_args)
child = sp.Popen(cmd_args)

您可能还需要交换cmd_args.append('start ')cmd_args.append('/wait '),具体取决于他们的目标顺序。

答案 1 :(得分:0)

我遇到了同样的问题,只是添加了有关Popen的注释:作为参数Popen接受了非外壳程序调用的字符串列表,而外壳程序调用则仅包含字符串。

此处列出的详细信息:WinError 2 The system cannot find the file specified (Python)