代码之家  ›  专栏  ›  技术社区  ›  S Meaden

python subprocess.run不运行inkscape pdf到svg

  •  1
  • S Meaden  · 技术社区  · 8 年前

    我使用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))
    

    只是为了测试操作系统管道,我写了一些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程序员很容易解决。

    1 回复  |  直到 8 年前
        1
  •  2
  •   S Meaden    8 年前

    交换斜线:

    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操作系统中将正斜杠换成反斜杠,而您的反斜杠目前充当转义前缀。