Passe dict como um argumento sobre SSH para o script Python

Sep 12 2020

Estou tentando passar argumentos dict usando o sshcomando por meio do osmódulo:

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

Estou recebendo um erro:

sh: line: 0 erro de sintaxe próximo ao token inesperado ('

Qual é a sintaxe certa para passar dict como um argumento?

Se eu passar string em vez de dict, funciona bem.

Alguma sugestão?

Respostas

2 KavinduPasanKavithilaka Sep 13 2020 at 02:50

Use 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 você pode usar urldecode e json pharse para decodificar isso em 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]))