我在 typescript 中執行 AppleScript,它回傳字串(但它實際上包含陣列)。是否可以將此字串轉換為打字稿中的專案陣列?
這是從 AppleScript 回傳陣列字串的代碼
import { Detail } from "@raycast/api";
import {runAppleScript} from 'run-applescript';
import { spawnSync } from "child_process";
async function spacesArray(): Promise<String> {
const out = spawnSync("defaults read com.pradeepb28.spacesfor myNewArray", { shell: true });
return String(out.output[1]).trim();
}
結果(字串格式):
(
abc,
abcd,
abcdef
)
uj5u.com熱心網友回復:
return String(out.output[1]).trim().split(",");
uj5u.com熱心網友回復:
該run-applescript模塊呼叫命令列osascript,正如您所發現的那樣,它對于傳遞復雜的引數和結果很糟糕。
如果您希望直接決議其輸出,則需要將-ss標志添加到osascript命令中。這會將輸出格式化為 AppleScript 文字,可以可靠地決議。默認輸出格式是“人類可讀的”,這充其量是模棱兩可的。
另一種選擇是讓您的 AppleScript 代碼將字串串列格式化為 JSON 字串并回傳,您可以使用JSON.parse(). AppleScript 沒有內置的 JSON 支持,但您可以NSJSONSerialization通過 AppleScript-ObjC 橋呼叫 Cocoa 的類。它的作業量更大,但它很健壯。這將是您最安全的路線,因為它避免引入任何額外的依賴項,并且 JSON 資料很容易理解。
第三種選擇是避免通過橋接從 JSosascript呼叫。這座橋本身有點粗糙和未完成(我有一個 PR,但它的作者正忙于其他作業),但可能足以滿足您的需求。拆開回傳的 s很乏味,但可靠。NSAppleScriptobjcobjcNSAppleEventDescriptor-[NSAppleScript executeAndReturnError:]
最后一個選擇是完全放棄 AppleScript,nodeautomation直接從 JS 撰寫應用程式腳本。但是,雖然nodeautomation效果很好(我在自己的作業中使用它),但我不提供任何保證或免費支持。
抱歉,沒有真正好的解決方案,但鑒于 Apple 徹底破壞了 Mac 自動化,它仍然存在是一個奇跡。
uj5u.com熱心網友回復:
我能夠通過手動決議器解決這個問題:
- 洗掉了空格,洗掉了 \n 并洗掉了左括號
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494181.html
標籤:javascript 数组 打字稿 细绳 苹果脚本
上一篇:在C /CLI中,如何將char*復制到System::String(不是C std::string)?
下一篇:意外的字串拆分行為
