2016-03-28 61 views
-1

我有一个批处理脚本,它在执行后会生成一个配置文件,生成的配置文件里面有一些数据。当我从命令提示符如下执行它,我得到所需的输出:为什么如果从python脚本执行批处理文件不工作,或者如果通过双击执行批处理文件?

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脚本执行batch(start.bat)并生成具有所需数据的config.txt文件。那么,我该怎么做。 为什么start.bat工作不正常,如果我双击它,为什么它工作正常,如果我从命令提示符执行它。

+0

在蝙蝠末端放置'暂停'并尝试双击。 – WhoAmI

+0

@WhoAmI不,它也不会通过添加暂停也woking。:/ – Learner

+2

无处不在指定完整路径。这个关于执行环境配置的毫无意义的问题一遍又一遍地提出。明确指出你想要发生的事情。 '%userprofile%\ desktop'通常是用户的桌面。 – 2016-03-28 07:22:56

回答

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") 
+0

学习者 - 现在工作吗? – Yaron