Многострочная команда для os.system - PullRequest
0 голосов
/ 26 апреля 2018

Может быть что-то очевидное, что я здесь упускаю, но поиск в Google / так не дал ничего полезного.

Я пишу скрипт на python, использующий tkinter 'filedialog.askopenfilename, чтобы открытьсредство выбора файловНе вдаваясь в подробности, у меня есть следующая строка, которая служит для вывода средства выбора файлов на переднюю часть экрана (взято непосредственно из этого полезного ответа ):

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.

Как правильно (и в идеале, минимально) сделать эту строку?

1 Ответ

0 голосов
/ 26 апреля 2018

Использование значительно улучшенного модуля subprocess обычно является гораздо лучшим, более мощным и безопасным способом вызова внешнего исполняемого файла.

Конечно, вы можете передавать переменные с \n в качестве аргументов.также.

Обратите внимание, что двойное значение (()) связано с тем, что первый параметр является кортежем.

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

Иногда существуют причины для вызова через оболочку, но обычно это не так.

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

...