如何将“命令模块”转换为“子进程模块”?

时间:2017-06-08 22:32:36

标签: python python-3.x

我想知道如何使用“子进程模块”来重写以下代码:

import commands
print commands.getoutput('convert -quality 100 ___t*.png images/transient_heat.gif')
print commands.getoutput('rm ___t*.png')

因为“命令模块”不支持Python 3,所以我想使用“子进程模块”。我尝试了以下代码,但它不起作用。

import subprocess
print ( subprocess.Popen('convert -quality 100 ___t*.png images/transient_heat.gif') )
print ( subprocess.Popen('rm ___t*.png') )

非常感谢!该代码最初来自Kitchin的博客:http://kitchingroup.cheme.cmu.edu/blog/2013/03/07/Transient-heat-conduction-partial-differential-equations/

2 个答案:

答案 0 :(得分:1)

subprocess需要一个构成命令的字符串列表。您可以像这样手动拆分命令:

import subprocess
print(subprocess.Popen(['convert', '-quality', '100', '___t*.png', 'images/transient_heat.gif']))
print (subprocess.Popen(['rm', '___t*.png']))

或者,您可以让shlex.split()为您完成工作:

import shlex
import subprocess
print (subprocess.Popen(shlex.split('convert -quality 100 ___t*.png images/transient_heat.gif')))
print (subprocess.Popen(shlex.split('rm ___t*.png')))

修改

以下代码将在执行时显示stdoutstderr的输出,这可以帮助您修复命令行中的任何错误。

import shlex
import subprocess

convert_proc = subprocess.Popen(shlex.split('convert -quality 100 ___t*.png images/transient_heat.gif'), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
outs, errs = convert_proc.communicate()
print('STDOUT: {}'.format(outs))
print('STDERR: {}'.format(errs))

subprocess.Popen(shlex.split('convert -quality 100 ___t*.png images/transient_heat.gif'))
print (subprocess.Popen(shlex.split('rm ___t*.png')))

答案 1 :(得分:0)

您可以使用subprocess.check_output

print subprocess.check_output('rm ___t*.png', shell=True)