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

2024-09-30 20:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获得一个温度和压力读数使用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

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

谢谢


Tags: 文件theecho网络folder温度destinationexe
3条回答

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

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<;=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

然而,正如邪恶的天才所指出的,直接从python发出http请求可能更好。requestsapi非常适合:

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

我不太担心“回声关闭”或“按任意键继续…”线。你知道吗

使用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执行是否正确?或者是否需要导入其他模块,以便外部程序正确运行代码?你知道吗

我希望这有道理。你知道吗

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

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 . . . 

相关问题 更多 >