我能够使用非常简单的语法启动应用程序。实施例
app="/Applications/MyApp/myAppExecutable"
file="/Users/userName/Pictures/myPicture.jpg"
cmd="open -a '%s' '%s'" % (app, file)
os.system(cmd)
结果cmd
在这里是:
open -a '/Applications/MyApp/myAppExecutable' '/Users/userName/Pictures/myPicture.jpg'
它运行得很好。
但我正在运行的应用程序接受一个可选的启动参数-proj filepath
,因此带有此可选参数的完整cmd
字符串应如下所示:
open -a '/Applications/MyApp/myAppExecutable' -proj '/Users/userName/Pictures' '/Users/userName/Pictures/myPicture.jpg'
但如果我用这样的cmdstring提供os.system()
,我会得到:
open: invalid option -- p
如何传递可选的app参数而不会导致错误并崩溃?
答案 0 :(得分:1)
根据open
手册页,您必须在程序参数之前传递--args
:
--args
All remaining arguments are passed to the opened application in the
argv parameter to main(). These arguments are not opened or inter-
preted by the open tool.
另外,您可能需要考虑使用subprocess
。以下是使用subprocess
命令的方式:
subprocess.check_call(['open', '-a', app, file])
不需要摆弄字符串插值。
答案 1 :(得分:1)
很有可能将应用程序的特定参数提交给OS open
命令。
open
的语法:
open -a /path/to/application/executable.file /filepath/to/the/file/to/open/with/app.ext
似乎可以将两个路径用双引号或单引号括起来,例如:
open -a '/path/to/application/executable.file' '/filepath/to/the/file/to/open/with/app.ext'
正如 Ned 所提到的,标志--args
可用于指定任何应用程序的特定启动标志。
应用程序特定标志位于open
的{{1}}标志之后,例如:
--args
问题是App专用标志(例如open -a /path/to/application/executable.file --args -proj
)只会在应用程序启动时传递。如果它已在运行,则-proj
命令将仅打开文件(如果指定了file_to_be_opened),但不会传递应用程序的特定参数。换句话说,App只能在它启动时接收它的args。
可以使用open -a
标志与-n
命令一起使用。使用时open -a
将根据需要启动尽可能多的应用实例。每个App实例都将正确获取App args。
open -a
如果与open -a '/path/to/application/executable.file' '/filepath/to/the/file/to/open/with/app.ext -n --args -proj "SpecificToApp arg or command" '
一起使用,则全部翻译:
subprocess
或者只是将其作为字符串arg传递给:
subprocess.check_call(['open', '-a', app, file, '-n', '--args', '-proj', 'proj_flag_values'])