在Raspberry Pi B+上使用Python2.7,我想从Python中调用命令"raspistill -o image.jpg“,并使用以下命令进行查找:
from subprocress import call
call(["raspistill","-o image.jpg"]) 然而,这不起作用,因为image.jpg不是在Python外部创建的,
raspistill -o确实创建了文件。下一次尝试是首先创建图像文件并写入。
f = open("image.jpg","w")
call(["raspistill","-o image.jpg"], stdout = f)现在创建了图像文件,但没有向其中写入任何内容:其大小仍为0。那么我怎么才能让它工作呢?
谢谢。
发布于 2015-05-27 16:46:00
您正在将-o image.jpg作为单个参数传递。你应该像两个人一样通过它们。下面是如何实现的:
call(["raspistill", "-o", "image.jpg"])这样做就像从命令行调用raspistill "-o image.jpg"一样,这很可能会导致错误。
发布于 2015-05-27 16:53:28
首先,创建并截断文件image.jpg
f = open("image.jpg","w")然后将raspistill的标准输出发送到同一个文件:
call(["raspistill","-o image.jpg"], stdout = f)当您最终使用Python语言对文件进行close-ing时,现在image.jpg将保存raspistill写入标准输出的所有内容。或者,如果你从来不close它,它将是减去最后一个缓冲区,这可能是什么都不是。
同时,您还试图通过将其作为-o参数的一部分进行传递,让raspistill创建一个同名文件。正如Ionut Hulub's answer解释的那样,你这样做是错误的。有些程序会接受"-o image.jpg" "-oimage.jpg",而"-o", "image.jpg"的意思是一样的,但有些程序不会。但是,即使这个程序接受了,你现在也只能让两个程序为创建和写入什么文件而争执不休。
如果raspistill可以选择将静态数据写入标准输出,那么您可以使用该选项,同时传递stdout=f,并确保close文件。或者,如果它有写入文件名的选项,那么您可以使用该选项。但两者兼而有之是行不通的。
发布于 2015-05-27 16:56:18
如果您不知道如何拆分命令,可以使用shlex.split。例如,
>>> import shlex
>>> args = shlex.split('raspistill -o image.jpg')
>>> args
['raspistill', '-o', 'image.jpg']
>>> call(args)https://stackoverflow.com/questions/30477371
复制相似问题