所以我想在 Rails 應用程式中使用 Python 腳本,并定義了這條路線:
get '/decks/:id/download', to: 'decks#download_deck', as: :download
然后在我看來,我有這個鏈接:
<%= link_to "Download", download_path , class: "p-2 ml-4 rounded-md bg-blue-600 text-white shadow-md align-middle" %>
然后在我的 decks#controller 我有這個公共方法:
def download_deck
@deck = Deck.find_by(params[:deck_id])
my_hash = {}
@deck.cards.each_with_index do |card, index|
my_hash[index] = { "front" => card.front, "back" => card.back }
end
data_json = my_hash.to_json
deck_filename = `python3 lib/assets/python/make_deck.py \""#{data_json}"\"`
send_data deck_filename, filename: 'hello.txt'
end
所以我用所有的資訊做一個哈希并在上面呼叫 to_json,我也有require 'json'在控制器檔案的頂部。然后在 python 檔案 make_deck.py 我有這樣的東西:
def main():
args = sys.argv
data = args[1]
print(data)
json_data = json.loads(data)
print(json_data)
print('hello')
print('world')
但是該行json_data = json.loads(data)會引發錯誤:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
我不明白的是,我正在傳遞一個字串,該字串是在哈希上呼叫 #to_json 的結果,但是在 Python 中 json.loads() 無法正確決議它,似乎應該如此。知道我在哪里出錯了嗎?
uj5u.com熱心網友回復:
\""使用單引號 ( ')代替帶有額外引號 ( )的轉義雙引號:
deck_filename = `python3 lib/assets/python/make_deck.py '#{data_json}'`
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/421024.html
標籤:
