os.system 的多行命令

Pet*_*lan 5 tkinter pep8 python-3.x

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

我正在编写一个 python 脚本,利用tkinter'sfiledialog.askopenfilename打开文件选择器。在没有详细介绍的情况下,我有以下行,它用于将文件选择器带到屏幕的前面(直接取自这个有用的答案):

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

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

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

我试过了

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

如果相关:使用 OSX 并运行 python 3.6.4。

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

gah*_*ooa 5

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

当然,您\n也可以将变量作为参数传递。

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

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

有时有理由通过 shell 进行调用,但通常不会。

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

  • 你好像少了一个括号。 (3认同)