python – subprocess.check_output不接受长参数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – subprocess.check_output不接受长参数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1616字,纯文字阅读大概需要3分钟。
内容图文
![python – subprocess.check_output不接受长参数](/upload/InfoBanner/zyjiaocheng/803/38575dbd2d284af4bbd2ea09cc834da1.jpg)
如果我从同一台机器上执行以下操作,我会按预期获得漂亮的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值传递给新进程.
现在,您自己创建了argv列表,并且您必须自己进行拆分.请注意,因此–title参数不再需要具有shell级别的引号.
一个简短的参数(-ml5或类似的)没有那个空格,所以你没有问题.
内容总结
以上是互联网集市为您收集整理的python – subprocess.check_output不接受长参数全部内容,希望文章能够帮你解决python – subprocess.check_output不接受长参数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。