我尝试使用Python脚本在Windows中运行.bat
文件。
ask.bat
档案:
Application.exe work.xml
我编写Python代码:
import os
os.system("D:\xxx1\xxx2XMLnew\otr.bat ")
输出:当试图运行文件时,它只是眨眼命令提示符,并且工作没有执行。
注意:我也尝试使用备用斜杠,但它无效。
我还想将文件的输出保存在另一个文件中。
任何人都可以建议我如何让脚本可以运行。
答案 0 :(得分:32)
这已经在SO上得到了详细的回答。看看这个帖子,它应该回答你所有的问题: Executing a subprocess fails
我自己尝试使用此代码:
<强> batchtest.py 强>
from subprocess import Popen
p = Popen("batch.bat", cwd=r"C:\Path\to\batchfolder")
stdout, stderr = p.communicate()
<强> batch.bat 强>
echo Hello World!
pause
我从上述帖子中获得了batchtest.py示例。
答案 1 :(得分:24)
import subprocess
filepath="D:/path/to/batch/myBatch.bat"
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE)
stdout, stderr = p.communicate()
print p.returncode # is 0 if success
答案 2 :(得分:4)
将\替换为路径中的/
import os
os.system("D:/xxx1/xxx2XMLnew/otr.bat ")
答案 3 :(得分:4)
最好以这样的方式编写.bat
文件,使其运行不依赖于当前工作目录,即我建议将此行放在.bat
文件的开头:< / p>
cd "%~dp0"
将.bat
文件的文件路径用双引号括起来,即:
os.system('"D:\\x\\so here can be spaces\\otr.bat" ["<arg0>" ["<arg1>" ...]]')
要将某些批处理命令的输出保存在另一个文件中,您可以使用常规的redirection syntax,例如:
os.system('"...bat" > outputfilename.txt')
或直接在您的.bat
文件中:
Application.exe work.xml > outputfilename.txt
答案 4 :(得分:3)
最简单的方法可能是 - &gt;
package b;
public class B {
int i;
}
class C extends B {
int i;
C(int a,int b) {
super.i=a;
i=b;
}
void show() {
System.out.println("i in superclass:"+super.i);
System.out.println("i in subclass:"+i);
}
}
class UseSuper {
public static void main(String[] args) {
C subOb=new C(1,2);
subOb.show();
}
}
答案 5 :(得分:1)
python_test.py
import subprocess
a = subprocess.check_output("batch_1.bat")
print a
这使得批处理文件的输出可以在python IDLE /运行控制台上打印。因此,在批处理文件中,您可以在每个步骤中回显结果以调试问题。当批量调用中发生错误时,这对于自动化也很有用,可以轻松地理解和定位错误。(在批处理文件中放置&#34;回显&#34;以避免打印所有内容)
<强> batch_1.bat 强>
echo off
echo "Hello World"
md newdir
echo "made new directory"
答案 6 :(得分:0)
如果您尝试在exe
- 文件中调用另一个bat
文件。
您必须在SET Path
- 您正在呼叫的文件中使用bat
。
set Path应指向exe
- 文件所在的目录:
set PATH=C:\;C:\DOS {Sets C:\;C:\DOS as the current search path.}
答案 7 :(得分:0)
您只是想让它变得原始。问题出在“ \”。在路径之前添加r可以完成工作:)
import os
os.system(r"D:\xxx1\xxx2XMLnew\otr.bat")
答案 8 :(得分:0)
所以我在Windows 10和Python 3.7.1(经过测试)中这样做:
import subprocess
Quellpfad = r"C:\Users\MeMySelfAndI\Desktop"
Quelldatei = r"\a.bat"
Quelle = Quellpfad + Quelldatei
print(Quelle)
subprocess.call(Quelle)