Python 如何转换;命令模块";变成;子流程模块";?
我想知道如何使用“子流程模块”重写以下代码:Python 如何转换;命令模块";变成;子流程模块";?,python,python-3.x,Python,Python 3.x,我想知道如何使用“子流程模块”重写以下代码: import commands print commands.getoutput('convert -quality 100 ___t*.png images/transient_heat.gif') print commands.getoutput('rm ___t*.png') 因为“命令模块”不支持Python3,所以我想使用“子流程模块”。我尝试了以下代码,但不起作用 import subprocess print ( subprocess
import commands
print commands.getoutput('convert -quality 100 ___t*.png images/transient_heat.gif')
print commands.getoutput('rm ___t*.png')
因为“命令模块”不支持Python3,所以我想使用“子流程模块”。我尝试了以下代码,但不起作用
import subprocess
print ( subprocess.Popen('convert -quality 100 ___t*.png images/transient_heat.gif') )
print ( subprocess.Popen('rm ___t*.png') )
多谢各位!代码最初取自Kitchin的博客:您可以使用
你可以用
子流程
需要组成命令的字符串列表。您可以手动拆分命令,如下所示:
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')))
子流程
需要组成命令的字符串列表。您可以手动拆分命令,如下所示:
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')))
你怎么知道它不起作用?编辑问题。@PeterWood我运行了代码,但无法生成输出文件“images/transient\u heat.gif”。非常感谢。你怎么知道它不起作用?编辑问题。@PeterWood我运行了代码,但无法生成输出文件“images/transient\u heat.gif”。非常感谢。否则,它将返回错误消息:
CalledProcessError:Command'convert-quality 100\uuuu t*.png images/transient\u heat.gif'返回非零退出状态4
。你能帮我一个忙吗?谢谢大家!@world2005您是否使用了shell=True
是的,我使用了shell=True
。代码是子流程。检查输出(['convert'、'-quality'、'100'、'uuuuu t*.png'、'images/transient\u heat.gif']、shell=True)
和子流程。检查输出(['rm\uuuuu t*.png'],shell=True)
。非常感谢。如果要传递命令列表,则不应使用shell。此外,列表中的每个项目应该只包含一个参数--['rm','.\uuuuuu t*.png']
如果我没有,它将返回错误消息:CalledProcessError:Command'convert-quality 100.\uuuuu t*.png images/transient\u heat.gif'返回非零退出状态4
。你能帮我一个忙吗?谢谢大家!@world2005您是否使用了shell=True
是的,我使用了shell=True
。代码是子流程。检查输出(['convert'、'-quality'、'100'、'uuuuu t*.png'、'images/transient\u heat.gif']、shell=True)
和子流程。检查输出(['rm\uuuuu t*.png'],shell=True)
。非常感谢。如果要传递命令列表,则不应使用shell。此外,列表中的每个项目应该只包含一个参数--['rm','.\uuuu t*.png']
我尝试了这两个代码,但它们无法输出“'images/transient\u heat.gif”。非常感谢。尝试使用convert实用程序的完整路径,而不仅仅是“convert”。您可以通过从shell提示符执行“which convert”来找到完整的路径。我尝试了这两个代码,但它们无法输出“'images/transient_heat.gif”。非常感谢。尝试使用convert实用程序的完整路径,而不仅仅是“convert”。通过从shell提示符执行“which convert”,可以找到完整的路径。