在Python脚本中运行批处理文件时出现Windows错误2

2 投票
1 回答
2619 浏览
提问于 2025-04-17 21:49

我看到有几个讨论这个错误的帖子,但没有一个能解决我的问题。想发个帖子,让大家看看我的代码,也许我们能找到一个对大家都有帮助的解决办法。

我正在尝试运行一个Python脚本,它的第一步是运行一个批处理文件。这个批处理文件实际上是用Wget来下载Python脚本需要处理的文件。

如果我手动运行整个Python脚本,它工作得非常好。但是,如果我通过Windows任务调度器或者命令行来运行,就会出现批处理脚本的问题。

如果我把批处理脚本的部分注释掉,任务调度器或命令行可以正常运行Python脚本。任务调度器和命令行也可以独立运行批处理文件,没有问题。

这是我的Python代码:

import time
import os
import sys
from subprocess import Popen
import zipfile
import win32com.client as win32

#1# Run the downloader batch file
p = Popen("NDICDownloader.bat", cwd=r"C:\NDICUpdate")
stdout, stderr = p.communicate()
p.wait()

这是我在命令行中得到的错误:

c:\Python27\python.exe c:\NDICUpdate\NDICUpdater.py
Traceback (most recent call last):
  file "c:\NDICUpdate\NDICUpdater.py", line 9, in (module)
    p = Popen("NDICDownloader.bat", cwd=r"C:\NDICUpdate")
  file "c:\Python27\lib\subprocess.py", line 672, in __init__
    errread, errwrite)
  file "c:\Python27\lib\subprocess.py", line 882, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

这是批处理文件:

cd C:\NDICUpdate\NDIC

wget --arguments include sensitive info--

这个批处理文件使用Wget将文件下载到NDIC文件夹。所有脚本都位于根文件夹C:\NDICUpdate中。所有文件都存在。

问题在于尝试让Windows在Python脚本中运行批处理文件。为什么Windows和Python在这里发生冲突呢??

1 个回答

1

(在评论中回答了。请查看 没有答案的问题,但在评论中解决了问题(或在聊天中扩展))

@MC ND 写道:

把你的代码改成用 cmd.exe 来启动进程,并把 /c NDICUpdate.bat 作为执行的参数:

p = Popen(["cmd.exe", "/c NDICDownloader.bat"], cwd=r"C:\NDICUpdate")

提问者写道:

这个方法有效。这个也可以用: os.system("c:\windows\system32\cmd.exe /c C:\NDICDownloader.bat")。最后我做的是写了一个批处理文件,先运行 Wget,然后再运行 Python。虽然经历了很多麻烦和浪费的时间,但至少找到了一个可行的解决方案。还是不知道怎么让 cmd.exe 来运行 Python 的子进程。

撰写回答