Python 子进程 : wait for command to finish before starting next one?

标签 python imagemagick subprocess imagemagick-convert

我已经编写了一个 Python 脚本来下载和转换许多图像,使用 wget 然后通过链式 subprocess 调用 ImageMagick:

for img in images: 
  convert_str = 'wget -O  ./img/merchant/download.jpg %s; ' % img['url'] 
  convert_str += 'convert ./img/merchant/download.jpg -resize 110x110 ' 
  convert_str += ' -background white -gravity center -extent 110x110' 
  convert_str += ' ./img/thumbnails/%s.jpg' % img['id']
  subprocess.call(convert_str, shell=True)

如果我在命令行手动运行 convert_str 的内容,它似乎可以正常工作,但如果我运行脚本使其重复执行,它有时会给我以下输出:

--2013-06-19 04:01:50--  
http://www.lkbennett.com/medias/sys_master/8815507341342.jpg
Resolving www.lkbennett.com... 157.125.69.163
Connecting to www.lkbennett.com|157.125.69.163|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22306 (22K) [image/jpeg]
Saving to: `/home/me/webapps/images/m/img/merchant/download.jpg'

 0K .......... .......... .                               100% 1.03M=0.02s

2013-06-19 04:01:50 (1.03 MB/s) - 
`/home/annaps/webapps/images/m/img/merchant/download.jpg' saved [22306/22306]

/home/annaps/webapps/images/m/img/merchant/download.jpg 
[Errno 2] No such file or directory: 
' /home/annaps/webapps/images/m/img/merchant/download.jpg'

奇怪的是,尽管有 No such file or directory 消息,但图像通常似乎已下载并转换成功。但偶尔他们看起来很腐败,black stripes在它们上(即使我使用的是最新版本的 ImageMagick),我认为这是因为它们在命令执行之前没有完全下载。

有什么方法可以让我对 Python 或 subprocess 说:“在第一个命令成功完成之前不要运行第二个命令?”。我 found this question却看不到明确的答案!

最佳答案

正常subprocess.call正在阻塞。

如果你想要非阻塞行为,你将使用subprocess.Popen .在这种情况下,您必须明确使用 Popen.wait等待进程终止。

参见 https://stackoverflow.com/a/2837319/2363712


顺便说一句,在 shell 中,如果您希望链接进程,您应该使用 && 而不是 ; —— 这样可以防止在第一个命令失败时启动第二个命令.此外,您应该在 Python 程序中测试子进程的退出状态,以确定命令是否成功。

关于Python 子进程 : wait for command to finish before starting next one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190031/

相关文章:

python - 我正在尝试获取所选列表项的索引值

.net - Magick .NET MagickDelegateErrorException 尝试读取上传的 .eps 文件时发生

python 子进程 dd 和 stdout

opencv - 使用 mogrify 将 jpg 无损转换为 png

python - subprocess.call 带有 rpyc 抛出错误

使用 subprocess.Popen 的 Python 内存分配错误

python - 将 pigpio 安装到虚拟环境中

python - 如何在networkx中正确定位网络边缘标签?

python - 如何使用带有多个百分比 (%) 符号的 PostgreSQL 和 Python 类似模式匹配?

java - 识别 Png 图像是否具有 100% 透明背景