繁体   English   中英

无法运行程序“ osascript”:error = 2,没有这样的文件或目录

[英]Cannot run program “osascript”: error=2, No such file or directory

我正在尝试在远程网格上托管的硒测试中运行以下小程序。

protected void enableTouchIDLogin(){
   Runtime runtime = Runtime.getRuntime();
   String appleScriptCommand =   "tell application \"System Events\" to tell process \"Simulator\"\n" +
                   "click menu item \"Touch ID Enrolled\" of menu 1 of menu bar item \"Hardware\" of menu bar 1\n"+
                   "end tell";


   String[] args = { "osascript", "-e", appleScriptCommand};
   try
   {
     Process process = runtime.exec(args);
   }
   catch (Exception e)
   {
     e.printStackTrace();
   }
}

当我在本地运行测试时,它工作正常。 但是在远程网格上我得到了

java.io.IOException: Cannot run program "osascript": error=2, No such file or directory at java.lang.ProcessBuilder.start(Unknown Source) at java.lang.Runtime.exec(Unknown Source) at java.lang.Runtime.exec(Unknown Source)

我不确定为什么会这样。 在远程网格上,“哪个osascript”返回“ / usr / bin / osascript”。 在本地运行时,这是我的osascript的相同位置。

鉴于本地和远程网格上的路径都是相同的,我不确定-e标志为什么不起作用。 我不确定appleScriptCommand应该是什么样子...

编辑

根据这里的答复之一,我尝试了以下操作,该操作不会引发错误,但是不会在本地或远程执行功能。

  protected void enableTouchIDLogin(){



   try
   {
       Runtime runtime = Runtime.getRuntime();
       String appleScriptCommand =   "tell application \"System Events\" to tell process \"Simulator\"\n" +
                       "click menu item \"Touch ID Enrolled\" of menu 1 of menu bar item \"Hardware\" of menu bar 1\n"+
                       "end tell";

       File executor = File.createTempFile("exec", ".sh");
       PrintWriter writer = new PrintWriter(executor, "UTF-8");
       writer.println("#!/bin/bash");
       writer.println();
       writer.println(String.format("osascript -e \"do shell script \\\"%s\\\" with administrator privileges\"",
                       appleScriptCommand));
       writer.close();
       executor.setExecutable(true);

       Process process = runtime.exec(String.format("%s",
                       executor.getPath()));
   }
   catch (Exception e)
   {
       e.printStackTrace();
   }

  }   

这对我有用
UPDATE5:

String script = "tell application \\\"System Events\\\" to tell process \\\"Simulator\\\"\n" +
                   "click menu item \\\"Touch ID Enrolled\\\" of menu 1 of menu bar item \\\"Hardware\\\" of menu bar 1\n"+
                   "end tell";
File executor = File.createTempFile("exec", ".sh");
PrintWriter writer = new PrintWriter(executor, "UTF-8");
writer.println("#!/bin/bash");
writer.println();
writer.println(String.format("osascript -e \"%s\" with administrator privileges",
        script);
writer.close();
executor.setExecutable(true);

Runtime.getRuntime().exec(String.format("%s", 
        executor.getPath()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM