我有一个python代码,它基于URL和来自用户输入的数据构建CURL命令
我有
import os
print ("______________\n")
print " 1.GET "
print " 2.POST "
print " 3.PUT "
print " 4.DELETE "
print ("______________\n")
http = int(raw_input("Select your option : "))
url = raw_input("Paste Your URL : ")
if not http:
http = 3
if http == 1:
cmd = 'curl '+ url
elif http == 2:
data = raw_input("Paste Your Data : ")
cmd = 'curl -g -X POST -H "Content-Type:application/json" -d \''+data+'\' ' + url
elif http == 3:
data = raw_input("Paste Your JSON Data: ")
cmd = 'curl -g -X PUT -H "Content-Type:application/json" -d \''+data+'\' ' + url
else:
cmd = 'curl -g -X DELETE ' + url
print ("_________________________________________\n")
print '\n'
print cmd
print '\n'
print ("_________________________________________\n")
run = raw_input("Do you want to run it ? [y/n]: ")
print '\n'
if run == 'y':
os.system(cmd+'\n')
print '\n'
else:
os.system("clear")
sys.exit()
python get_curl.py
______________
1.GET
2.POST
3.PUT
4.DELETE
______________
Select your option : 3
Paste Your URL : http://172.19.242.32:1234/vse/vcpe/002233445567/vlan/104/device/000011223350/duration
Paste Your Data : {"acl_mode": 2, "portal_url": "http://localhost:8888/captive-portal?client_mac=$MAC&ap=$AP-MAC", "duration": 120 }
_________________________________________
curl -g -X PUT -H "Content-Type:application/json" -d '{"acl_mode": 2, "portal_url": "http://localhost:8888/captive-portal?client_mac=$MAC&ap=$AP-MAC", "duration": 120 }' http://172.19.242.32:1234/vse/vcpe/002233445567/vlan/104/device/000011223350/duration
_________________________________________
Do you want to run it ? [y/n]: y
{ "status": 201, "message": "Processed cpe HNS device duration message" }
然后,我在github gist上托管它,所以我可以分享它
link =
执行要点
curl "https://gist.githubusercontent.com/bheng/b23d775ee7b106cd7cc0ae5ac71b81a9/raw/c6ecd3ed7bc04699d73e1b9ed521f481ac6a41c4/get_curl.py" -s -N | python
结果
______________
1.GET
2.POST
3.PUT
4.DELETE
______________
Select your option : Traceback (most recent call last):
File "<stdin>", line 11, in <module>
EOFError: EOF when reading a line
为什么我会在本地Mac上运行它有不同的结果?
我该如何预防?
答案 0 :(得分:3)
由于您将curl
命令传递给python
,因此stdin连接到管道,而不是用户的终端。
您可以使用bash process substitution使curl命令显示为文件名参数,而不是从stdin读取它。
python <(curl "https://gist.githubusercontent.com/bheng/b23d775ee7b106cd7cc0ae5ac71b81a9/raw/c6ecd3ed7bc04699d73e1b9ed521f481ac6a41c4/get_curl.py" -s -N)
答案 1 :(得分:2)
当python等待输入时,管道正在发送线路。最好做一些像
这样的事情curl "https://gist.githubusercontent.com/bheng/b23d775ee7b106cd7cc0ae5ac71b81a9/raw/c6ecd3ed7bc04699d73e1b9ed521f481ac6a41c4/get_curl.py" -s -N > myscript; python myscript