Übergeben Sie dict als Argument über SSH an Python-Skript

Sep 12 2020

Ich versuche, dikt-Argumente mit dem sshBefehl über das osModul zu übergeben:

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

Ich erhalte eine Fehlermeldung:

sh: line: 0 Syntaxfehler in der Nähe eines unerwarteten Tokens ('

Was ist die richtige Syntax, um Dikt als Argument zu übergeben?

Wenn ich einen String anstelle eines Diktats übergebe, funktioniert das einwandfrei.

Irgendwelche Vorschläge?

Antworten

2 KavinduPasanKavithilaka Sep 13 2020 at 02:50

Verwenden Sie json und 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')

Und Sie können urldecode und json pharse verwenden, um dies in local_script.py zu dekodieren

import json 
import urllib.parse 
dict1 = json.loads(urllib.parse.unquote(sys.argv[1])) 
dict2 = json.loads(urllib.parse.unquote(sys.argv[2]))