У меня есть некоторые файлы .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")