2015-04-01 1 views
1

Je veux intégrer un petit script python dans un script bash afin que je puisse envoyer un objet json à un socket. J'ai essayé le code suivant:Python intégré dans bash ne fonctionne pas

python -c "$(cat << 'EOF' 
import socket 
import json 

data = {'ip':192.168.1.150', 'status':'up'} 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('127.0.0.1', 13373)) 
s.send(json.dumps(data)) 
result = json.loads(s.recv(1024)) 
print result 
s.close() 
EOF 
)" 

et ceci: python " socket importation importation de JSON

data = {'ip':192.168.1.150', 'status':'up'} 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('127.0.0.1', 13373)) 
s.send(json.dumps(data)) 
result = json.loads(s.recv(1024)) 
print result 
s.close() 
" 

Mais je continue à obtenir l'erreur suivante:

data = {'ip':192.168.1.150', 'status':'up'} 
        ^
SyntaxError: invalid syntax 

Je suppose que c'est parce que bash interprète cela, pas python.J'ai testé le code dans un script python, un ça marche. De plus, ai-je besoin de l'option -c? Excusez-moi, je suis complètement inexpérimenté en python, j'ai écrit des scripts bash très complets pour le projet sur lequel je travaille et j'ai besoin d'envoyer la sortie de ceux-ci aux sockets en tant qu'objets json. Un tel petit code Python embarqué semble de loin la réponse la plus simple, à moins que quelqu'un n'ait d'autres suggestions.

Python version installée sur CentOS Python 2.6.6

Répondre

4

Le problème que vous avez des résultats que dans le SyntaxError est que vous ne disposez pas d'une seule Guillemet ouvrant sur la valeur IP dans le data dict. Vous avez:

data = {'ip':192.168.1.150', 'status':'up'} 

Vous devez:

data = {'ip':'192.168.1.150', 'status':'up'} 
+0

grâce @John. Coder à 3h du matin et paniquer ma solution n'allait pas fonctionner. Appréciez votre temps et j'aurais dû le remarquer. – jewfro