Python子流程-返回非零退出状态1
我想使用Python子流程-返回非零退出状态1,python,python-3.x,unix,subprocess,wkhtmltopdf,Python,Python 3.x,Unix,Subprocess,Wkhtmltopdf,我想使用python3.6和子流程模块执行这个UNIX命令: cat report_html | ./wkhtmltopdf - test.pdf 我尝试的 import subprocess report_html = "<html><body><h1>Hello World</h1></body></html>" subprocess.run(['cat', report_html, '|', '
python3.6
和子流程
模块执行这个UNIX
命令:
cat report_html | ./wkhtmltopdf - test.pdf
我尝试的
import subprocess
report_html = "<html><body><h1>Hello World</h1></body></html>"
subprocess.run(['cat', report_html, '|', '/tmp/wkhtmltopdf', '-', '/tmp/test.pdf'], check=True)
导入子流程
报告\u html=“你好,世界”
subprocess.run(['cat',report_html',|','/tmp/wkhtmltopf','-','/tmp/test.pdf',check=True)
我收到的错误
{
"errorMessage": "Command '['cat', '<html><body><h1>Hello World</h1></body></html>', '|', '/tmp/wkhtmltopdf', '-', '/tmp/test.pdf']' returned non-zero exit status 1.",
"errorType": "CalledProcessError",
"stackTrace": [
[
"/var/task/lambda_function.py",
30,
"lambda_handler",
"subprocess.run(['cat', report_html, '|', '/tmp/wkhtmltopdf', '-', '/tmp/test.pdf'], check=True)"
],
[
"/var/lang/lib/python3.6/subprocess.py",
438,
"run",
"output=stdout, stderr=stderr)"
]
]
}
{
“errorMessage:“命令“['cat'、'Hello World'、'|'、'/tmp/wkhtmltopf'、'-'、'/tmp/test.pdf']”返回非零退出状态1。”,
“errorType”:“CalledProcessError”,
“stackTrace”:[
[
“/var/task/lambda_function.py”,
30,
“lambda_handler”,
“subprocess.run(['cat',report_html',|','/tmp/wkhtmltopf','-','/tmp/test.pdf',check=True)”
],
[
“/var/lang/lib/python3.6/subprocess.py”,
438,
“跑”,
“输出=标准输出,标准输出=标准输出”
]
]
}
请指导我如何解决此问题。如果要在
子流程中使用管道
,则必须使用shell=True
参数,由于多种原因,这不是最佳解决方案
通常,这是通过运行两个单独的进程并将第一个进程的输出传递到第二个进程来完成的,例如:
cat = subprocess.Popen(['cat', 'report_html'], stdout=subprocess.PIPE) # Change stdout to PIPE
output = subprocess.check_output(['wkhtmltopdf', '-', 'xxx.pdf'], stdin=cat.stdout) # Get stdin from cat.stdout