cURL流作为python模块的标准输入

cURL流作为python模块的标准输入,python,curl,cmd,python-requests,Python,Curl,Cmd,Python Requests,我试图通过CMD中的以下行将Python模块的cURL输出管道化为input: curl https://api.particle.io/v1/devices/e00fce68515bfa5f850de016/events?access_token=ae40788c6dba577144249fec95afdeadb18e6bec | pythonmodule.py 当curl自行运行时(不带“| pythonmodule.py”,它每30秒连续传输一次数据(通过温度和湿度传感器连接到氩气IoT

我试图通过CMD中的以下行将Python模块的cURL输出管道化为input:

curl https://api.particle.io/v1/devices/e00fce68515bfa5f850de016/events?access_token=ae40788c6dba577144249fec95afdeadb18e6bec | pythonmodule.py
当curl自行运行时(不带“
| pythonmodule.py
”,它每30秒连续传输一次数据(通过温度和湿度传感器连接到氩气IoT)完美地打印实时温度和湿度。但当我尝试通过|重定向输出时,它似乎只工作一次,它不会连续运行pythonmodule,每次提供新数据时都应该运行pythonmodule

我试图使用库
requests.get()
,但由于它是一个连续的流,所以它似乎在
get()
上冻结了


有人能解释一下这个cURL流实际上是如何工作的吗?

关于冻结请求连续流,您可以使用
请求中的
正文内容工作流
,以避免等待一次下载全部内容:

with requests.get('your_url', stream=True) as response:
    for line in response.iter_lines(decode_unicode=True):
        if line:
            print(line)
输出:

:ok
event: SensorVals
data: {"data":"{humidity: 30.000000, temp: 24.000000}","ttl":60,"published_at":"2019-11-28T13:53:04.592Z","coreid":"e00fce68515bfa5f850de016"}
event: SensorVals
data: {"data":"{humidity: 29.000000, temp: 24.000000}","ttl":60,"published_at":"2019-11-28T13:53:34.604Z","coreid":"e00fce68515bfa5f850de016"}
...

我在这里假设,“似乎只工作一次”意味着命令在第一次收到数据后退出。可能是python脚本在第一行之后停止读取

在stdin上循环可能会解决您的问题:

导入系统 对于n,枚举中的行(sys.stdin): 如果line.strip()!=“”: 打印(n行)
使用如下命令:

curl -sN https://api.particle.io/v1/devices/e00fce68515bfa5f850de016/events?access_token=ae40788c6dba577144249fec95afdeadb18e6bec | python blah.py
将导致:

0 :ok

3 event: SensorVals

4 data: {"data":"{humidity: 30.000000, temp: 24.000000}","ttl":60,"published_at":"2019-11-28T13:50:34.459Z","coreid":"e00fce68515bfa5f850de016"}

9 event: SensorVals

10 data: {"data":"{humidity: 30.000000, temp: 24.000000}","ttl":60,"published_at":"2019-11-28T13:51:04.608Z","coreid":"e00fce68515bfa5f850de016"}

^CTraceback (most recent call last):
  File "blah.py", line 3, in <module>
    for n, line in enumerate(sys.stdin):
KeyboardInterrupt

0:ok
3事件:传感器VAL
4数据:{“数据”:“{湿度:30.000000,温度:24.000000}”,“ttl:60”,发布于“:”2019-11-28813:50:34.459Z”,“coreid”:“e00fce68515bfa5f850de016”}
9事件:传感器VAL
10数据:{“数据”:“{湿度:30.000000,温度:24.000000}”,“ttl”:60”,发布于“2019-11-28813:51:04.608Z”,“coreid”:“E00FCE6851BFA5F850DE016”}
^CTraceback(最近一次通话最后一次):
文件“blah.py”,第3行,在
对于n,枚举中的行(sys.stdin):
键盘中断