Python 需要删除批处理文件吗

Python 需要删除批处理文件吗,python,windows,batch-file,cmd,Python,Windows,Batch File,Cmd,好的,我已经在很多网站上搜索了几天了。如果某处有答案,如果你指给我看,那就好了。我试图让批处理文件“A”读取文本文件“B”,获取一些信息并替换批处理文件“C”中的代码。在第一次运行时,它将执行此操作,然后运行批处理文件“C”。当批处理文件“C”正在运行时,我有批处理文件“A”监视文本文件“B”,以查看文件最后修改部分的更改。当检测到更改时,我需要停止批处理文件“C”,将文本文件“B”读/写到批处理文件“C”,然后再次启动批处理文件“C” 除了每次检测到更改时运行批处理文件“A”时,它会启动一个新

好的,我已经在很多网站上搜索了几天了。如果某处有答案,如果你指给我看,那就好了。我试图让批处理文件“A”读取文本文件“B”,获取一些信息并替换批处理文件“C”中的代码。在第一次运行时,它将执行此操作,然后运行批处理文件“C”。当批处理文件“C”正在运行时,我有批处理文件“A”监视文本文件“B”,以查看文件最后修改部分的更改。当检测到更改时,我需要停止批处理文件“C”,将文本文件“B”读/写到批处理文件“C”,然后再次启动批处理文件“C”

除了每次检测到更改时运行批处理文件“A”时,它会启动一个新的批处理文件“C”运行外,我的代码可以完成所有工作

要启动批处理文件“C”,我使用:


我尝试过使用p.terminate()和p.kill(),但两者都不起作用。谢谢大家的帮助。

在windows上,我使用它,它工作正常。也可以通过直接调用win32 api来完成

 os.system ("taskkill /F /PID "+str (p.pid))
p是您的子进程popen对象

编辑:这不起作用,可能是因为
start
前缀。您需要创建一个python线程并在real命令上运行Popen。这里有一个有效的例子

我创建了一个类,所以不需要全局变量(我讨厌它们)。它创建一个线程,该线程一旦通过
start()
启动,就会执行
Popen
。它运行一个可执行文件,因此不需要
shell=True
,但对于.bat文件,您可能需要它。 它将p对象存储在私有的
\u管道
属性中并等待

doit
方法在启动线程后等待5秒钟,然后使用您尝试的命令终止管道

与您尝试的不同之处在于,它不需要windows
start
命令,而是使用python在后台运行,因此它可以更好地控制进程(
start
只是启动进程并停止,您没有关于进程的信息)

使用Python3.4进行测试

import threading
import subprocess
import time

class Runner():
    def run_command(self):
        p = subprocess.Popen("notepad.exe")
        self.__pipe = p
        p.wait()

    def doit(self):
        t = threading.Thread(target=self.run_command)
        t.start()
        time.sleep(5)
        self.__pipe.terminate()

r = Runner()
r.doit()

我插入了您的代码,但它似乎没有做任何事情,因为我对python有点陌生,在运行批处理文件之前,我是否应该更改一些内容?注意:我的subprocess.popen是p=在我的文件中,您正在运行
cmd/c“start cmd/c:\Users\james\Documents\FollowMeMap.bat”
,因为
shell=True
。为什么不直接运行批处理文件而不使用
shell=True
?如果需要新的控制台窗口,请使用
p=subprocess.Popen(r'C:\Users\james\Documents\FollowMeMap.bat',creationflags=subprocess.CREATE\u new\u console)
。与此类似,process
p
是执行“FollowMeMap.bat”的实际cmd.exe实例,您可以
p.kill()
import threading
import subprocess
import time

class Runner():
    def run_command(self):
        p = subprocess.Popen("notepad.exe")
        self.__pipe = p
        p.wait()

    def doit(self):
        t = threading.Thread(target=self.run_command)
        t.start()
        time.sleep(5)
        self.__pipe.terminate()

r = Runner()
r.doit()