0

我有这行在 linux 上运行良好:

input_file = '%s/my_input.html' % settings.FILE_PATH
args =['wkhtmltopdf', input_file, '-']
popen = Popen(args, stdout=PIPE, stderr=PIPE)

wkhtmltopdf在 Windows 中不能在 linux 上我完全没有问题。我认为这是与斜杠/反斜杠相关的问题,但不知道如何解决。已经尝试使用反斜杠和双反斜杠。

有什么建议么?

所有这些变体中的相同错误:

"C:\\tmp\\input.html"

"C:\tmp\input.html"

os.path.join("C:\\tmp", "input.html")

'%s%sinput.html' % ('C:\\tmp', os.path.sep)

/admin/salidas/pdf/ 处的 WindowsError [错误 2] El sistema no puede hallar el archivo especificado

这意味着系统找不到指定的文件。

在 Popen 线上

4

3 回答 3

2

不要将文件路径视为简单的字符串,而是使用 python 库类将它们作为路径进行操作。在这种情况下os.path.join

input_file = os.path.join( settings.FILE_PATH, my_input.html)
于 2012-07-05T23:37:10.250 回答
1

一般来说,在处理路径时尝试使用原始字符串.. 即,r在路径名之前添加一个。例如,

my_path = 'c:\test\bob`

更好的

my_path = r'c:\test\bob`

因为它将防止路径规范中的\tand\b被解释为违背您的兴趣。

此外,查看os.path模块及其操作系统特定的功能/信息,了解在给定操作系统上使用了哪些路径分隔符 ( os.sep ),以及join() 函数等 - 这比直接使用字符串来指定更好/操纵路径。

于 2012-07-05T23:34:16.947 回答
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'
于 2012-07-05T23:48:26.527 回答