使用Python运行.bat文件

使用Python运行.bat文件,python,windows,python-2.7,batch-file,Python,Windows,Python 2.7,Batch File,我有一个批处理文件,我用它加载一些预构建的二进制文件来控制我的设备。 它的命令是: cd build java -classpath .;..\Library\mfz-rxtx-2.2-20081207-win-x86\RXTXcomm.jar - Djava.library.path=..\Library\mfz-rxtx-2.2-20081207-win-x86 tabotSample/Good1 pause 现在,我想使用Python运行批处理文件,我尝试了os.system(batch

我有一个批处理文件,我用它加载一些预构建的二进制文件来控制我的设备。 它的命令是:

cd build
java -classpath .;..\Library\mfz-rxtx-2.2-20081207-win-x86\RXTXcomm.jar -
Djava.library.path=..\Library\mfz-rxtx-2.2-20081207-win-x86 tabotSample/Good1
pause
现在,我想使用Python运行批处理文件,我尝试了
os.system(batch,bat)
,并尝试了使用Popen

导入操作系统
从子流程导入Popen
os.popen(“cd标签”)
r=os.popen(“hello.bat”)

然而,python控制台(AnacondaPython2.7)似乎执行了代码,但没有返回任何内容,也没有发生任何事情。 我想从python运行这个批处理文件,请帮助我。 顺便说一句,我尝试了popen的另一个批处理文件,比如,
echo Hello
但什么也没发生

我认为应该这样做:

batch.py

from subprocess import Popen
p = Popen("test.bat", cwd=r"C:\path\to\batch\folder")
stdout, stderr = p.communicate()
测试.bat

echo Hello World!
pause
echo .bat file running from python
pause
copy "C:\temp\test.txt" "C:\temp\test2.txt"

我认为这应该是这样的:

batch.py

from subprocess import Popen
p = Popen("test.bat", cwd=r"C:\path\to\batch\folder")
stdout, stderr = p.communicate()
测试.bat

echo Hello World!
pause
echo .bat file running from python
pause
copy "C:\temp\test.txt" "C:\temp\test2.txt"

这是一个简单的解决方案

from subprocess import Popen
import subprocess

def run_batch_file(file_path):
    Popen(file_path,creationflags=subprocess.CREATE_NEW_CONSOLE)

run_batch_file('file_name.bat')
文件名.bat

echo Hello World!
pause
echo .bat file running from python
pause
copy "C:\temp\test.txt" "C:\temp\test2.txt"

这是一个简单的解决方案

from subprocess import Popen
import subprocess

def run_batch_file(file_path):
    Popen(file_path,creationflags=subprocess.CREATE_NEW_CONSOLE)

run_batch_file('file_name.bat')
文件名.bat

echo Hello World!
pause
echo .bat file running from python
pause
copy "C:\temp\test.txt" "C:\temp\test2.txt"
你也可以用这个

import subprocess
subprocess.call(["C:\\temp\\test.bat"], shell=False)
测试.bat

echo Hello World!
pause
echo .bat file running from python
pause
copy "C:\temp\test.txt" "C:\temp\test2.txt"
你也可以用这个

import subprocess
subprocess.call(["C:\\temp\\test.bat"], shell=False)
测试.bat

echo Hello World!
pause
echo .bat file running from python
pause
copy "C:\temp\test.txt" "C:\temp\test2.txt"

在这里,许多人提出了非常有用的解决方案,但我想指出的是,该项目位于何处的重要性。 (Bat文件通常用于自动化任务,以减少时间,这很有可能用于与任务相关的路径)


在这里,许多人提出了非常有用的解决方案,但我想指出的是,该项目位于何处的重要性。 (Bat文件通常用于自动化任务,以减少时间,这很有可能用于与任务相关的路径)


按照惯例,
cd-build
一般不起作用。依靠工作目录查找与脚本相关的资源是错误的。使其相对于批处理文件本身的目录,而不是依赖于工作目录。例如,如果“build”目录与批处理文件位于同一目录中,您可以使用
cd/d“%~dp0build”
,其中批处理文件名是
%0
参数,我们得到的[d]驱动和基[p]路径是
%~dp0
。它不起作用,我不知道为什么每次使用popen运行.bat文件时都不会发生任何事情。照此,
cd-build
一般不起作用。依靠工作目录查找与脚本相关的资源是错误的。使其相对于批处理文件本身的目录,而不是依赖于工作目录。例如,如果“build”目录与批处理文件位于同一目录中,您可以使用
cd/d“%~dp0build”
,其中批处理文件名是
%0
参数,而我们得到的[d]驱动和基[p]路径是
%~dp0
。它不起作用,我不知道为什么每次使用popen运行.bat文件时都没有发生任何事情。看起来批处理文件正在工作,但它需要选择Y/N,如何输入?或者预输入此键?您可以传递参数,例如subprocess.call([“C:\\temp\\test.bat”,“Y”]或subprocess.call([“C:\\temp\\test.bat”,“N”])。在bat文件中,您可以使用%0、%1、…)访问此参数。我尝试了subprocess.call([“C:\\temp\\test.bat”,“Y”]),但它不起作用。对不起,我对这方面还不熟悉。我运行了xcopy“C:\temp\test.txt”“C:\temp\test2.txt”在cmd上,它问我Y/N/A,它将在我计时Y或A时被复制。我想用python完成所有进程。当我运行subprocess.call([“C:\\temp\\test.bat”,“Y”]在python中时,内核刚刚堆叠。很抱歉,我的错误xcopy需要用户交互示例无法正常工作。请尝试复制“C:\temp\test.txt”“C:\temp\test2.txt”和subprocess.call([“C:\\temp\\test.bat”])批处理文件似乎正在工作,但它需要选择Y/N,如何输入?或预输入此键?您可以传递参数,例如subprocess.call([“C:\\temp\\test.bat”,“Y”]或subprocess.call([“C:\\temp\\test.bat”,“N”]。在bat文件中,您可以使用%0、%1、…访问此参数。我尝试了subprocess.call([“C:\\temp\\test.bat”,“Y”]但是,它不起作用。很抱歉,我对此非常陌生。我运行了xcopy“C:\temp\test.txt”“C:\temp\test2.txt”在cmd上,它问我Y/N/A,当我计时Y或A时,它将被复制。我想用python完成所有进程。当我运行subprocess.call([“C:\\temp\\test.bat”,“Y”]在python中,内核刚刚堆叠。对不起,我的错误是xcopy需要用户交互示例无法正常工作。请尝试复制“C:\temp\test.txt”“C:\temp\test2.txt”和子进程调用([“C:\\temp\\test.bat”])