I have a python script that needs to be called from within an Extendscript script. Is there any library function available which can do this? I tried finding a solution in the documentation and many other online resources but nothing has worked for me so far. Any help is appreciated.
How to call a python or shell script from within Extendscript?
Asked Answered
Take a look at this example.
It creates a .term file next to the script file and executes it.
This is a cleaned version:
main();
function main() {
var script_file = File($.fileName); // get the full path of the script
var script_folder = script_file.path; // get the path from that
var new_termfile = createTermFile("execute_something", script_folder);
new_termfile.execute(); // now execute the termfile
}
/**
* creates a .term file
* @param {String} term_file_name --> the name for the .term file
* @param {Strin} path --> the path to the script file
* @return {File} the created termfile
*/
function createTermFile(term_file_name, path) {
/*
http://docstore.mik.ua/orelly/unix3/mac/ch01_03.htm
1.3.1.1. .term files
You can launch a customized Terminal window from the command line by saving some prototypical Terminal settings to a .term file,
then using the open command to launch the .term file (see "open" in Section 1.5.4, later in this chapter).
You should save the .term file someplace where you can find it later, such as ~/bin or ~/Documents.
If you save it in ~/Library/Application Support/Terminal, the .term file will show up in Terminal's File Library menu.
To create a .term file, open a new Terminal window, and then open the Inspector (File Show Info, or -I)
and set the desired attributes, such as window size, fonts, and colors. When the Terminal's attributes
have been set, save the Terminal session (File Save, or -S) to a .term file (for example, ~/Documents/proto.term).
Now, any time you want to launch a Terminal window from the command line, you can issue the following command:
*/
var termfile = new File(path + "/" + term_file_name + ".term");
termfile.open("w");
termfile.writeln(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"" +
"\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +
"<plist version=\"1.0\">\n" +
"<dict>\n" +
"<key>WindowSettings</key>\n" +
"<array>\n" +
" <dict>\n" +
"<key>CustomTitle</key>\n" +
"<string>My first termfile</string>\n" +
"<key>ExecutionString</key>\n" +
"<string>python\nprint \"Hello World\"\nexit()</string>\n" +
"</dict>\n" +
"</array>\n" +
"</dict>\n" +
"</plist>\n");
termfile.close();
return termfile;
};
ExtendScript File objects have an execute() method, as already shown by Fabian. I did not know about .term files and would have used a .command file instead, that's a plain shell script rather than XML.
If running within InDesign, you can bypass Terminal.app and use AppleScript:
myScript = 'do shell script "diff f1 f2 > o" ';
app.doScript(myScript, ScriptLanguage.applescriptLanguage);
Yes the .command file is way cooler than the verbose .term file! (Did not know them)Only thing is you have to make it executable. The .term file gets executed right away –
Sayce
© 2022 - 2024 — McMap. All rights reserved.