我在linux上运行这条线很好:
input_file = '%s/my_input.html' % settings.FILE_PATH
args =['wkhtmltopdf', input_file, '-']
popen = Popen(args, stdout=PIPE, stderr=PIPE)
Windows中的 wkhtmltopdf
无法在linux上完全没有问题。我认为这是斜杠/反斜杠相关的问题,但不知道如何解决它。已经尝试过使用反斜杠和双反斜杠。
有什么建议吗?
所有这些变化都有相同的错误:
"C:\\tmp\\input.html"
"C:\tmp\input.html"
os.path.join("C:\\tmp", "input.html")
'%s%sinput.html' % ('C:\\tmp', os.path.sep)
WindowsError at / admin / salidas / pdf / [错误2] El sistema没有puede hallar el archivo especificado
这意味着系统无法找到指定的文件。
在Popen Line上的那个
答案 0 :(得分:2)
不要将文件路径视为简单字符串,而是使用python库类将它们作为路径进行操作。在这种情况下os.path.join
input_file = os.path.join( settings.FILE_PATH, my_input.html)
答案 1 :(得分:1)
通常在处理路径时尝试使用原始字符串。即,在路径名之前预先添加r
。如,
my_path = 'c:\test\bob`
更好
my_path = r'c:\test\bob`
因为它会阻止路径规范中的\t
和\b
被解释为您的兴趣。
另外,请查看os.path模块及其特定于操作系统的函数/信息,以及在给定操作系统上使用的路径分隔符(os.sep)和join()函数等 - 最好直接使用字符串来指定/操纵路径。
答案 2 :(得分:0)
使用os.path.sep
,它会在Windows上返回操作系统依赖路径分隔符(\\
和Linux上的/
)
>>> import os
>>> FILE_PATH='somepath'
>>> input_file='%s%smy_input.html' % (FILE_PATH,os.path.sep)
>>> input_file
'somepath\\my_input.html' #on windows on linux it returns 'somepath/my_input.html'