Chuyển dict làm đối số qua SSH sang tập lệnh Python

Sep 12 2020

Tôi đang cố gắng chuyển đối số dict bằng sshlệnh qua osmô-đun:

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

Tôi gặp lỗi:

sh: line: 0 lỗi cú pháp gần mã thông báo không mong muốn ('

Cú pháp phù hợp để chuyển dict làm đối số là gì?

Nếu tôi chuyển chuỗi thay vì dict, nó hoạt động tốt.

Bất kỳ đề xuất?

Trả lời

2 KavinduPasanKavithilaka Sep 13 2020 at 02:50

Sử dụng json và 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')

Và bạn có thể sử dụng urldecode và json pharse để giải mã điều này trong 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]))