os.system () и subprocess.call () ведут себя по-разному - PullRequest
0 голосов
/ 18 октября 2018

У меня есть сценарий, который запускает Scribus с определенным файлом и автоматически запускает сценарий Python внутри Scribus.

Теперь я хочу передать дополнительные параметры сценарию Scribus, но, делая это, я наткнулся настранная разница между os.system() (которую я использовал раньше) и subprocess.call() (которую я хотел бы использовать сейчас, поскольку вызов становится все более сложным).

Исходная команда:

os.system('scribus -g -py /home/ale/src/bin_etc/scribus-a6-to-a4-pdf.py -pa single -- funktionen.sla')

новый:

file = 'funktionen.sla'
arguments = ['-pa', 'single']

call(['scribus', '-g', '-py', '/home/ale/src/bin_etc/scribus-a6-to-a4-pdf.py'] + arguments + ['--', file])

Хотя первая команда работает правильно (и команда single распознается в скрипте inner ), при запускеScribus сообщает мне, что новая команда call() не может найти открытый файл.

Для меня обе команды выглядят одинаково.Кто-нибудь может помочь определить разницу?

PS: В качестве дополнения, вот документация для запуска скриптов Scribus из командной строки:

https://wiki.scribus.net/canvas/Command_line_scripts

1 Ответ

0 голосов
/ 18 октября 2018

Как я уже писал в комментариях к моему вопросу, я не заметил, что в вопросе уже был правильный код.

Проблема заключалась в том, что при переносе кода с os.system() на subprocess.call(), еслиу вас есть конец опций (--), вы должны позаботиться о том, чтобы не оставлять пробелов вокруг двух тире: '-- ' автоматически обрезается оболочкой (запускается os.system(), ноне по subprocess.call(), который передаст опции в том виде, в каком они есть, и конечная программа поймет это как другую опцию (названную пробелом) со значением файла, который вы намеревались прочитать.

...