Passa dict come argomento su SSH allo script Python

Sep 12 2020

Sto cercando di passare argomenti dict usando il sshcomando tramite il osmodulo:

os.system(f'ssh remote_host python -u - {dict1} {dict2} < local_script.py')

Ricevo un errore:

sh: riga: 0 errore di sintassi vicino al token imprevisto ('

Qual è la sintassi corretta per passare dict come argomento?

Se passo string invece di dict, funziona bene.

Eventuali suggerimenti?

Risposte

2 KavinduPasanKavithilaka Sep 13 2020 at 02:50

Usa json e 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')

E puoi usare urldecode e json pharse per decodificarlo in 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]))