为什么批处理文件如果从python脚本执行或者通过双击执行?

时间:2016-03-28 06:30:32

标签: python windows batch-file cmd

我有一个批处理脚本,它在执行后生成一个配置文件,生成的配置文件里面有一些数据。当我从命令提示符执行它时,如下所示,我得到了所需的输出:

C:/> start.bat

但是,如果我尝试从python脚本执行如下,或者即使我双击并执行它,我确实得到配置文件,但它不包含任何所需的数据,它只是在其中有'0':

import subprocess as sp
p= sp.Popen("C:/pathtobatch/start.bat",stdin=sp.PIPE, stdout = sp.PIPE, stderr=sp.PIPE)

在批处理脚本(start.bat)中,我实际上正在执行python脚本并将其数据检索到配置文件,如下所示:

python C:\inetpub\ftproot\sample.py > log.txt
set  myvar =< log.txt
del log.txt
echo %errorlevel% %myvar% >C:\inetpub\ftproot\config.txt

我需要从python脚本执行批处理(start.bat)并生成具有所需数据的config.txt文件。那么,我该怎么办呢。 为什么start.bat不能正常工作,如果我双击它,为什么它正常工作,如果我从命令提示符执行它。

1 个答案:

答案 0 :(得分:1)

是否有可能得到'0',因为它是%errorlevel%?

的值

我发现你的案子有两个问题:

1)批处理文件 - 您可以将批处理文件更新为:

for /f %%i in ('python C:\inetpub\ftproot\sample.py') do set myvar=%%i
echo %errorlevel% %myvar% >C:\inetpub\ftproot\config.txt

相信设置变量的想法:https://stackoverflow.com/a/2340018/5088142

2)python脚本 - 请你将你的python脚本更新为:

import os
os.system("C:/pathtobatch/start.bat")