我有一些.dot文件,我想使用python转换为pdf。命令如下:
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")
答案 0 :(得分:0)
您可以尝试从脚本内更改工作目录以控制执行上下文。就像命令行复制中的cd
一样。 os.chdir
是更改cwd的标准库方法。
确保脚本具有足够的权限运行。