Вызов subprocess.call () для .exe в другом каталоге - PullRequest
0 голосов
/ 25 октября 2018

У меня есть некоторые файлы .dot, которые я хочу преобразовать в pdf с помощью python.Команда выглядит следующим образом:

dot -Tpdf -o output.pdf input.dot

Эта команда работает, если я выполняю ее прямо из cmd.Но с помощью Pythons subprocess.call он не работает.

Файл dot.exe находится в отдельном каталоге с зависимостью от других файлов, я попытался запустить его так:

subprocess.call(['C:/graphviz-2.38/release/bin/', 'dot', '-Tpdf', '-o ' + file + '.pdf' + file])

И вот так (точка добавляется в путь)

subprocess.call(['C:/graphviz-2.38/release/bin/dot', '-Tpdf', '-o' + file + '.pdf' + file])

Последний просто запускает dot.exe и не принимает никаких аргументов, первый выдает мне следующую ошибку:

    Traceback (most recent call last):
  File "xmltodot2.py", line 22, in <module>
    subprocess.call(['C:/graphviz-2.38/release/bin/', 'dot', '-Tpdf', '-o ' + file + '.pdf' + file])
  File "C:\Python27\lib\subprocess.py", line 172, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 394, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 644, in _execute_child
    startupinfo)
WindowsError: [Error 5] Access is denied

Как запустить dot.exe, который имеет зависимости от файлов в своем каталоге из другого каталога?

Я новичок в Python и не уверен в синтаксисе.

Спасибо!

РЕДАКТИРОВАТЬ:

Полный код

import os, fnmatch, subprocess, string
from subprocess import call

# opens the directory
listOfFiles = os.listdir('.')
# file extensions to look for
pattern = "*.xml"
pattern2 = "*.dot"
path = "C:/graphviz-2.38/release/bin"

#Converts every dot-file in the directory to pdf
for file in listOfFiles:
if fnmatch.fnmatch(file, pattern2):
    os.chdir(path)
    subprocess.call(['C:/graphviz-2.38/release/bin/dot', '-Tpdf', '-o' +         
file + '.pdf', file])
    print("Converted " + file + " to pdf")

1 Ответ

0 голосов
/ 25 октября 2018
  1. Вы можете попытаться изменить рабочий каталог из вашего скрипта для управления контекстом выполнения.Это похоже на cd в вашей командной строке воспроизведения.os.chdir - это стандартный метод библиотеки для изменения cwd.

  2. Убедитесь, что ваш скрипт работает с достаточными разрешениями.

...