在Python中使用www.example.com('dir ')时找不到指定的文件subprocess.call

c7rzv4ha  于 2023-01-27  发布在  Python
关注(0)|答案(2)|浏览(176)

我在Windows 10上运行以下Python文件:

import subprocess

subprocess.call("dir")

但我得到了以下错误:

File "A:/python-tests/subprocess_test.py", line 10, in <module>
    subprocess.call(["dir"])

  File "A:\anaconda\lib\subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:

  File "A:\anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 210, in __init__
    super(SubprocessPopen, self).__init__(*args, **kwargs)

  File "A:\anaconda\lib\subprocess.py", line 709, in __init__
    restore_signals, start_new_session)

  File "A:\anaconda\lib\subprocess.py", line 997, in _execute_child
    startupinfo)

FileNotFoundError: [WinError 2] The system cannot find the file specified

请注意,我在这里只使用dir作为示例,实际上我想运行一个更复杂的命令,但在这种情况下也会得到相同的错误。
请注意,我没有使用shell=True,因此这个问题的答案不适用:Cannot find the file specified when using subprocess.call('dir', shell=True) in Python
这是subprocess.py的第997行:

hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
                                         # no special security
                                         None, None,
                                         int(not close_fds),
                                         creationflags,
                                         env,
                                         os.fspath(cwd) if cwd is not None else None,
                                         startupinfo)

当我运行调试器检查传递给CreateProcess的参数时,我注意到executableNone,这正常吗?

eqqqjvef

eqqqjvef1#

dir是在cmd.exe中实现的命令,因此没有dir.exe Windows可执行文件。必须通过cmd调用该命令。

subprocess.call(['cmd', '/c', 'dir'])
hpxqektj

hpxqektj2#

调用dir时,您***必须***设置shell=True,因为dir不是可执行文件(没有dir.exe这样的文件)。dir是使用cmd.exe加载的internal command
documentation中可以看到:
在具有shell=True的Windows上,COMSPEC环境变量指定默认shell。在Windows上,只有当要执行的命令内置到shell中时(例如,dir或copy),才需要指定shell=True。运行批处理文件或基于控制台的可执行文件时,不需要shell=True

相关问题