当前位置: 首页 > 知识库问答 >
问题:

从python启动osascript并启动

陶鹏
2023-03-14

以下是我的小程序的要点

一个python脚本,用于检查某个目录中是否有新文件(电影文件),并相应地更新sqlite3数据库,从而将要处理的文件排队。使用launchctl每分钟运行一次。

另一个python脚本,使用HandBrake命令行界面进行文件转换的实际处理。还可以使用launchctl每分钟运行一次。

在第二个脚本中,转换完成后,我想启动一个applescript,将文件导入到iTunes中,并带有特定的元数据。

所以,目录中的新电影文件-

我的问题是applescript部分。如果我通过终端运行第二个python脚本(转换然后导入的脚本),一切都会顺利运行。文件被转换,然后applescript将其导入iTunes。但如果启动脚本的是launchctl,那么它似乎跳过了applescript部分。

下面是python中applescript的部分

import subprocess, shlex
cmd = "/usr/bin/osascript /Users/alexis/Developer/Media/import_iTunes.scpt '{0}' ".format(file)
subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)

还有applescript(为了简单起见,我删除了一些部分)

on run argv
    set newTrackPath to posix file (item 1 of argv)
    tell application "iTunes"
        activate
        set newTrack to add newTrackPath
    end tell
end run

我试过使用subprocess。呼叫(cmd),操作系统。系统(cmd)和子流程。波本(cmd)。

问题似乎是,当使用launchctl启动该python脚本时,无法从python启动osascript。

有人有什么解释或工作吗?

非常感谢。

共有1个答案

慕高格
2023-03-14

在哪个用户下运行Python脚本?我假设您将它作为当前用户的用户代理运行;如果没有,您应该。

您的shlex代码既冗余又不安全(例如,考虑一下当您尝试导入I Wanna Be Bobby's Girl.mp3时会发生什么)。

Python代码不必等待子进程完成或检查其返回代码,因此任何失败都将以静默方式通过。您需要解决这个问题:如果您确实知道子流程错误是什么,那么对它们进行故障排除就会容易得多。

如果你不关心AppleScript的输出,你可以使用check_call便利功能,如果AppleScript失败,它会抛出一个异常:

subprocess.check_call(["/usr/bin/osascript", 
        "/Users/alexis/Developer/Media/import_iTunes.scpt", file])

(或者,如果您有直接使用Popen的实际原因,并且为了“简单”而省略了相关代码,请展示它,以便我们可以看到您实际在做什么。)

您可能还想调整launchdXML,以便将Python脚本的stderr写入一个文件,以便于查看。

 类似资料:
  • 问题内容: 我有以下脚本 我收到以下错误 显示。 显示。 问题答案: Firefox的最新版本无法与硒一起正常使用。尝试使用46或45。 您可以在此处下载:ftp.mozilla.org/pub/firefox/releases 要么 您也可以按以下所示以图形方式执行此操作:http://www.howtogeek.com/117929/how-to-downgrade- packages-on-

  • 我有一个问题,我正试图利用我以前的编程知识来编写一个地雷发射器。我使用了标准C库中的命令和任何规模不大的Python代码。我更喜欢使用系统(“java…”) 以发射雷艇。 简而言之,问题是:如何在没有任何辅助Java代码的情况下从命令行启动Minecraft?(如果不使用像net.minecraft.LauncherFrame这样的发射器代码)这有可能吗?我尝试了java-cp采矿工艺。罐子网。地

  • 我正在使用下面的python boto3代码来启动Ec2 当实例处于运行状态时,我可以通过运行此lambda来停止实例。 但当实例处于停止状态并且我运行Lambda时,我会得到下面的消息,它不会显示任何错误。但当我签入控制台时,实例仍然处于停止状态。我无法找出实例为什么没有进入运行阶段。实例状态=80个实例id为i-06ce851edfXXXXXX的已启动实例 下面是使用的IAM角色

  • 请注意,当您使用 Jetty NPN 库需要提供它的位置通过 bootclasspath 的 JVM 参数。这一步是必需的,这样才能访问 SslEngine接口。(-Xbootclasspath 选项允许您覆盖标准 JDK 附带的实现类)。 下面的清单显示了特殊的参数(-Xbootclasspath)使用。 Listing 12.7 SpdyServer implementation java -

  • This page will help you install OCaml, the Dune build system, and support for your favourite text editor or IDE. These instructions work on Windows, Unix systems like Linux, and macOS. Installing OCam

  • 这是我的类文件,它扩展了FragmentActivity。我不太确定我做得对不对。我想有一个选项卡式布局在这个活动,但应用程序不断崩溃。 ```