我想知道如何使用“子进程模块”来重写以下代码:
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/
答案 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')))
修改强>:
以下代码将在执行时显示stdout
和stderr
的输出,这可以帮助您修复命令行中的任何错误。
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)
print subprocess.check_output('rm ___t*.png', shell=True)