Python Subprocess.Run не работает Inkscape PDF для SVG

1

Я использую Inkscape для ввода одностраничного pdf файла и вывода файла svg. Следующие команды из командной строки

c:\progra~1\Inkscape\inkscape -z -f "N:\pdf_skunkworks\inflation-report-may-2018-page0.pdf" -l "N:\pdf_skunkworks\inflation-report-may-2018-page0.svg"

где -z является коротким для --without-gui, -f является коротким для входного файла, -l сокращен для --export-plain-svg. И это работает из командной строки.

Я не мог получить эквивалент для работы с Python, либо передав командную строку как одну длинную строку, либо как отдельные аргументы. stderr и stdout дают ошибок, поскольку оба они печатают None

import subprocess #import call,subprocess
#completed = subprocess.run(["c:\Progra~1\Inkscape\Inkscape.exe",r"-z -f \"N:\pdf_skunkworks\inflation-report-may-2018-page0.pdf\" -l \"N:\pdf_skunkworks\inflation-report-may-2018-page0.svg\""])
completed = subprocess.run(["c:\Progra~1\Inkscape\Inkscape.exe","-z", r"-f \"N:\pdf_skunkworks\inflation-report-may-2018-page0.pdf\"" , r"-l \"N:\pdf_skunkworks\inflation-report-may-2018-page0.svg\""])
print ("stderr:" + str(completed.stderr))
print ("stdout:" + str(completed.stdout))

Просто для проверки OS-сантехники я написал код VBA (мой обычный язык), и это работает

Sub TestShellToInkscape()
    '* Tools->References->Windows Script Host Object Model (IWshRuntimeLibrary)
    Dim sCmd As String
    sCmd = "c:\progra~1\Inkscape\inkscape -z -f ""N:\pdf_skunkworks\inflation-report-may-2018-page0.pdf"" -l ""N:\pdf_skunkworks\inflation-report-may-2018-page0.svg"""
    Debug.Print sCmd

    Dim oWshShell As IWshRuntimeLibrary.WshShell
    Set oWshShell = New IWshRuntimeLibrary.WshShell

    Dim lProc As Long
    lProc = oWshShell.Run(sCmd, 0, True)

End Sub

Поэтому я явно делаю что-то глупое в коде Python. Я уверен, что опытный программист Python мог бы легко решить.

Теги:
subprocess
inkscape

1 ответ

2
Лучший ответ

Поменяйте свои косые черты:

import subprocess #import call,subprocess
completed = subprocess.run(['c:/Progra~1/Inkscape/Inkscape.exe',
      '-z', 
      '-f', r'N:/pdf_skunkworks/inflation-report-may-2018-page0.pdf' , 
      '-l', r'N:/pdf_skunkworks/inflation-report-may-2018-page0.svg'])
print ("stderr:" + str(completed.stderr))
print ("stdout:" + str(completed.stdout))

Python знает, что нужно поменять местами косые черты для обратных косых черт на ОС Windows, а ваши обратные слэши в настоящее время действуют как префикс побега.

  • 2
    Вы поставили меня на правильный путь, я вставил рабочий код в этот ответ. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню