为什么是subprocess.call()没有按预期运行命令?

2024-06-16 15:11:58 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个小众场景,要直接测试,您需要wkhtmltoppdf(在本例中,监听端口7000 w/--从stdin读取args)并作为守护进程运行(手头还有一个方便的html文件)

如果我这样做:

echo "-s letter -T 24mm -R 24mm -B 0mm -g ~/my.html /tmp/my.pdf" | nc localhost 7000

然后很快弹出pops/tmp/我的.pdf... 我可以连续做25次,得到的结果就像我分别上下旋转wkhtmltopf一样多。在

Walp,这意味着我需要能够从我们自己的队列进食守护进程中调用它,而且,在检查结果的存在和相应的成功或失败的滴答声之前,我必须等待它完成。在

我发现了subprocess.call但它不起作用的原因不明。。。也就是说,从python提示符:

^{pr2}$

我得到:

"-s letter -T 24mm -R 24mm -B 0mm -g ~my.html /tmp/my1.pdf" | nc localhost 7000
0

0表示它认为它是成功的。。。但是,与我从bash本身执行相同的语句不同,wkhtmltopdf守护进程没有任何内容。我试着在里面多加一个“echo”,因为打印出来的结果不包括它,但是结果是一样的。在

所以。。。在某种程度上,这与直接在bash提示符中输入的方式不同。在

有什么想法?专业知识?在

谢谢!在


Tags: 端口echobashlocalhostpdf进程myhtml
1条回答
网友
1楼 · 发布于 2024-06-16 15:11:58

要解决您的问题,通过shell调用echo和{}是一种可行的方法,但并不实用。在

相反,我会的

def call_7000(*a):
    import socket
    s = socket.create_connection(('localhost', 7000))
    s.write(" ".join(str(i) for i in a)
    s.close()

你现在可以称之为

^{pr2}$

或者作为

(除了我不知道~/我的.html“有效;也许您应该改为os.expanduser('~/my.html')。)

你甚至可以做到

def call_7000(*args, **kwargs):
    import socket
    import itertools
    s = socket.create_connection(('localhost', 7000))
    items = itertools.chain(" ".join("-%s %s" % (k, v) for k, v in kwargs), a)
    s.write(" ".join(str(i) for i in items)
    s.close()

用它来称呼它

^{4}$

如果选项的顺序不相关。在

相关问题 更多 >