gpt4 book ai didi

python - subprocess.check_output 不接受长参数

转载 作者:太空狗 更新时间:2023-10-30 02:22:08 25 4
gpt4 key购买 nike

如果我在同一台机器上执行以下操作,我会按预期获得漂亮的 PDF:

$ wkhtmltopdf --title "Transaction 773 (printed version)" --margin-left 5 --margin-right 2 --encoding utf8 www.google.com - > salida.pdf

但如果来自普通的 python shell 我会:

>>> import subprocess
>>> f = open("salida.pdf", "wb")
>>> f.write(subprocess.check_output(["wkhtmltopdf", '--title "Transaction 773 (printed version)"', "--margin-left 5", "--margin-right 2", "--encoding utf8", "www.google.com", "-"]))

然后我得到的只是常见的错误:

/usr/lib/python2.7/subprocess.pyc in check_output(*popenargs, **kwargs)
542 if cmd is None:
543 cmd = popenargs[0]
--> 544 raise CalledProcessError(retcode, cmd, output=output)
545 return output
546

CalledProcessError: Command '['wkhtmltopdf', '--title "Transaction 773 (printed version)"', '--margin-left 5', '--margin-right 2', '--encoding utf8', 'www.google.com', '-']' returned non-zero exit status 1

查看完整的错误信息,它告诉我:

Unknown long argument --title "Transaction 773 (printed version)"

为什么不接受参数?值得一提的是,如果我删除所有参数并只保留输入文件和“-”,它就像魅力一样。

最佳答案

您需要在单独的项目中指定每个参数,长参数实际上是 2 个值:

f.write(subprocess.check_output([
"wkhtmltopdf",
'--title', "Transaction 773 (printed version)",
"--margin-left", "5",
"--margin-right", "2",
"--encoding", "utf8",
"www.google.com", "-"]))

通常情况下,shell 会解析这样的命令行,将其拆分为空格(除非文本已用引号引起来),然后将其作为 argv 传递给新进程。值(value)。

现在,您正在创建 argv列出你自己,你必须自己做 split 。请注意 --title因此参数也不再需要 shell 级别的引号。

一个简短的论点(-ml5 或类似的)没有那个空格,所以你没有遇到这些问题。

关于python - subprocess.check_output 不接受长参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12288830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com