2016-10-27 8 views
2

を経由して、それを実行する場合にのみ行を読んだとき、EOF私は、ユーザー入力から例外EOFError:カール


をURLやデータのcurlコマンドベースを構築するPythonコードを持っている私は

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のの主旨にホストし、私はその要旨を実行

リンク=

https://gist.githubusercontent.com/bheng/b23d775ee7b106cd7cc0ae5ac71b81a9/raw/c6ecd3ed7bc04699d73e1b9ed521f481ac6a41c4/get_curl.py


それを共有することができ

01私は私のローカルのMac上でそれを実行しているだろうと私は別の結果を持っていないのはなぜ

結果

______________ 

    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 

どうすればいいですか?

+0

おそらく、pythonがパイプと混同されている可能性があります( 'stdin'と' raw_input'に問題があると考えます)? (それで、スクリプトのコードをスクリプトの入力として使用していますか?) – BorrajaX

答えて

2

パイプは、pythonが入力を待つ間に行を送ります。あなたはpythoncurlコマンドをパイプしているので

curl "https://gist.githubusercontent.com/bheng/b23d775ee7b106cd7cc0ae5ac71b81a9/raw/c6ecd3ed7bc04699d73e1b9ed521f481ac6a41c4/get_curl.py" -s -N > myscript; python myscript 
+0

良いチップの男:) – ihue

1

ような何かを行うには良い、標準入力がパイプではなく、ユーザの端末に接続されています。

bash process substitutionを使用すると、curlコマンドをstdinから読み込むのではなく、ファイル名引数として表示させることができます。

python <(curl "https://gist.githubusercontent.com/bheng/b23d775ee7b106cd7cc0ae5ac71b81a9/raw/c6ecd3ed7bc04699d73e1b9ed521f481ac6a41c4/get_curl.py" -s -N) 
+0

素晴らしい提案! – ihue

+0

完璧に動作しますが、私はこれが '<(...)'であるかどうか尋ねるかもしれませんか?また、あなたが提案したコマンドはどのOSでも動作しますか? Windows、Linux、Mac? – ihue

+1

これはプロセスの置き換えです。ドキュメントページへのリンクを追加しました。 *プロセスの置換は、名前付きパイプ(FIFO)をサポートするシステムやオープンファイルの名前を指定する/ dev/fdメソッドでサポートされています。* LinuxやMacで動作しますが、Windows上で動作するかどうかはわかりません。 – Barmar

関連する問題