[英]How to write to the beginning of a file when using 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.