os.system 的多行命令

Multi line command to os.system

我可能在这里遗漏了一些明显的东西,但搜索 google/so 没有提供任何有用的东西。

我正在编写 python 脚本,利用 tkinterfiledialog.askopenfilename 打开文件选择器。无需详细介绍,我有以下行,用于将文件选择器带到屏幕前面(直接取自 this helpful answer):

os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')

从上面的代码片段可以看出,这一行对于 pep8 指南来说太长了,我想把它分解一下。

然而,尽管我尽了最大努力,但我似乎无法让它分裂。这是因为(我认为)该行包含单引号和双引号,不幸的是 os.system 似乎坚持它是单行。

我试过了

  1. 三引号
  2. 字符串文字修补(\ 在末尾,+ 在每行的开头)
  3. 每行三引号

如果相关:使用 OSX 和 运行 python 3.6.4.

打破这条线的正确(理想情况下,最少)方法是什么?

使用大大改进的 subprocess 模块通常是调用外部可执行文件的更好、更强大、更安全的方法。

你当然也可以传递带有 \n 的变量作为参数。

注意,双 (()) 是因为第一个参数是一个元组。

import subprocess
subprocess.call((
    '/usr/bin/osascript', 
    '-e',  
    'tell app "Finder" to set frontmost of process "Python" to true',
    ))

有时有理由通过 shell 打电话,但通常情况下不会。

https://docs.python.org/3.6/library/subprocess.html