【问题标题】:running terminal command from python 3.3从 python 3.3 运行终端命令
【发布时间】:2016-02-13 12:15:00
【问题描述】:

我正在尝试从 python 3.3(mac osx 10.7.5)运行 wkhtmltopdf(将 html 转换为 pdf 的例程:http://wkhtmltopdf.org)命令。

当使用以下命令直接在终端上运行时,该例程就像一个魅力:

wkhtmltopdf http:google.com /Users/ME/Desktop/google.pdf

其中 http:google.com 是目标文件中将转换为 pdf 的 html:/Users/ME/Desktop/google.pdf

但是当从 python 调用 shell 时:

import subprocess

subprocess.call(["wkhtmltopdf http:google.com /Users/ME/Desktop/google.pdf"])

我明白了:

> Traceback (most recent call last):   File "<pyshell#5>", line 1, in
<module>
    subprocess.call(["wkhtmltopdf http:google.com /Users/thenoze/Desktop/google.pdf"])   File
"/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/subprocess.py",
line 523, in call
    with Popen(*popenargs, **kwargs) as p:   File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/subprocess.py",
line 824, in __init__
    restore_signals, start_new_session)   File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/subprocess.py",
line 1448, in _execute_child
    raise child_exception_type(errno_num, err_msg) FileNotFoundError: [Errno 2] No such file or directory: 'wkhtmltopdf http:google.com /Users/ME/Desktop/google.pdf'

--> 任何线索如何格式化我的 subprocess.call() ?

【问题讨论】:

    标签: python shell python-3.x terminal command


    【解决方案1】:

    将命令行参数分隔为列表项:

    subprocess.call(["wkhtmltopdf", "http:google.com", "/Users/ME/Desktop/google.pdf"])
    

    否则,wkhtmltopdf ... google.pdf 将被视为程序路径,而不是 wkhtmltopdf

    【讨论】:

    • 感谢您对此进行调查。看来,如果我在终端窗口中直接使用 python 运行它,它会完美运行。但是,当使用到 python 例程中时,它无法识别“wkhtmltopdf”。我买它是因为终端中的路径与作为 *.py 运行时的 python 路径不同。但它也没有奏效。你认为它可能是什么?
    猜你喜欢
    • 2018-02-12
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2018-12-28
    • 2019-12-22
    相关资源
    最近更新 更多