繁体   English   中英

Python subprocess.call()不会将内容写入文件

[英]Python subprocess.call() doesn't write content to file

在Raspberry Pi B +上使用Python 2.7,我想从Python调用命令“ raspistill -o image.jpg”,并建议使用此命令:

from subprocress import call
call(["raspistill","-o image.jpg"]) 

但是,这没有用,因为尽管在Python之外,也没有创建image.jpg,

raspistill -o

确实创建了文件。 接下来的尝试是首先创建图像文件并写入。

f = open("image.jpg","w")
call(["raspistill","-o image.jpg"], stdout = f)

现在创建了图像文件,但没有写入任何内容:其大小保持为0。那么如何使它起作用?

谢谢。

您将-o image.jpg作为单个参数传递。 您应该像两个一样通过它们。 方法如下:

call(["raspistill", "-o", "image.jpg"])

这样做的方式就像raspistill "-o image.jpg"调用raspistill "-o image.jpg" ,这可能会导致错误。

首先,您要创建并截断文件image.jpg

f = open("image.jpg","w")

然后,您将raspistill的stdout发送到同一文件:

call(["raspistill","-o image.jpg"], stdout = f)

当您最终开始使用Python close文件时,现在image.jpg将仅保存raspistill写入stdout的内容。 或者,如果您从不close它,那就是减去最后一个缓冲区,这可能根本没有。

同时,您还试图通过将其作为-o参数的一部分传递来使raspistill创建具有相同名称的文件。 正如Ionut Hulub的回答所言 ,您做错了。 某些程序会将"-o image.jpg" "-oimage.jpg""-o", "image.jpg"视为同一意思,而有些则不会。 但是,即使这样做了,充其量您现在还是拥有两个程序来争用创建和写入的文件image.jpg

如果raspistill具有将still写入stdout的选项,则可以将该选项与传递stdout=f一起使用,并确保close文件。 或者,如果它具有写入文件名的选项,则可以使用选项。 但是, 两者都行不通。

如果您不知道如何分割命令,可以使用shlex.split 例如,

>>> import shlex
>>> args = shlex.split('raspistill -o image.jpg')
>>> args
['raspistill', '-o', 'image.jpg']
>>> call(args)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM