Passer dict en tant qu'argument sur SSH au script Python
Sep 12 2020
J'essaie de passer des arguments dict en utilisant la sshcommande via le osmodule:
os.system(f'ssh remote_host python -u - {dict1} {dict2} < local_script.py')
J'obtiens une erreur:
sh: line: 0 erreur de syntaxe près du jeton inattendu ('
Quelle est la bonne syntaxe pour passer dict comme argument?
Si je passe une chaîne au lieu de dict, cela fonctionne très bien.
Aucune suggestion?
Réponses
2 KavinduPasanKavithilaka Sep 13 2020 at 02:50
Utilisez json et urlencode.
import urllib.parse
import json
dict1_j = urllib.parse.quote(json.dumps(dict1))
dict2_j = urllib.parse.quote(json.dumps(dict2))
os.system(f'ssh remote_host python -u - {dict1_j} {dict2_j} < local_script.py')
Et vous pouvez utiliser urldecode et json pharse pour décoder cela dans local_script.py
import json
import urllib.parse
dict1 = json.loads(urllib.parse.unquote(sys.argv[1]))
dict2 = json.loads(urllib.parse.unquote(sys.argv[2]))