使用Python从可执行文件/批处理文件中检索值

时间:2015-06-26 17:27:59

标签: python batch-file

我想从位于我的网络上的晴雨表使用Python获取温度和压力读数。然后我想将这些值分配给变量。目前,已设置批处理文件,其中包含以下内容:

ECHO OFF
L:\Destination_Folder\httpget.exe -r -S "*SRTC\r" 172.24.48.67:1000 echo. #echo the temperature.
L:\Destination_Folder\httpget.exe -r -S "*SRHm\r" 175.24.48.67:1000 echo. #echo the pressure.
PAUSE

我需要一种简单的方法来获取这些值并将它们分配给变量,以便它们可以用于各种计算。

感谢您

3 个答案:

答案 0 :(得分:2)

要运行批处理文件和集合输出,如果您正在运行python2.7 +,则可以使用subprocess.check_output(您也可以直接调用httpget两次而不使用包装器批处理脚本):< / p>

import os
from subprocess import check_output
output = check_output(['/path/to/batch_file.bat'])
# parse the output, depending on what it is exactly, could be something like
temp, pressure = [int(l.strip()) for l in output.split(os.linesep) if l.strip()]

如果您想要更多控制或运行python&lt; = 2.6,您可以通过执行类似

的操作来获得等效行为
from subprocess import Popen
process = Popen(['/path/to/batch_file.bat'], stdout=PIPE)
output, _ = process.communicate()
retcode = process.poll()
if not retcode:
    # success! output has what you need
    temp, pressure = [int(l.strip()) for l in output.split(os.linesep) if l.strip()]
    # ...
else:
    # some non-zero exit code... handle exception

然而,正如Evil Genius指出的那样,直接从python发出http请求可能更好。 requests api非常适合:

import requests
response = requests.get('http://172.24.48.67:1000', params=...)
print(response.text)

答案 1 :(得分:0)

我发现另一篇帖子使用了类似的内容:

import os
fh = os.popen("tempPres.bat")
output = fh.read()
print output
fh.close()

但是,我需要解析数据,以便我只将第二行和第三行保存到变量中。我该怎么做呢?

批处理文件的输出如下所示:

TEXT...>ECHO OFF 
0022.60
0710.50
Press any key to continue . . . 

答案 2 :(得分:0)

我不太担心“ECHO OFF”或“按任意键继续...”。线。

使用Spyder测试我的Python代码,我能够使用:

import os
fh = os.popen("tempPres.bat")
output = fh.read()
data = output.splitlines()
temp = data[2]
pres = data[3]
print (temp)
print (pres)

带输出:

0022.50
0710.90

使用SPYDER可以正常工作。但是,当我尝试在程序中运行完全相同的代码时,批处理文件似乎不会产生正确的输出。我输出的所有内容都是第一行“ECHO OFF”。看来httpget.exe可执行文件没有返回第二行和第三行。

我的程序预设了Python数学模块,numpy和scipy,我已经安装了os模块库。有没有我可以测试httpget.exe是否正确执行?或者是否有一个不同的模块,我可能需要为我的外部程序导入以正确运行我的代码?

我希望这是有道理的。