我试图用子进程模块(从here引用)替换os.system
,尽管它似乎可以工作(在脚本编辑器中显示结果),但实际上不起作用。
def convert_text(inImg, outImg, texImg):
if not os.path.exists(texImg):
Image.open(inImg).save(outImg)
#os.system('/apps/Linux64/prman-18.0/bin/txmake ' + outImg + ' ' + texImg)
subprocess.Popen("/apps/Linux64/prman-18.0/bin/txmake" + outImg + " " + texImg, shell = True)
os.remove(outImg)
print "Done converting " + inImg
上面的代码应该查找任何图像文件,将其转换为.tif,然后再转换为.tex。尽管结果可能显示为
Done converting /user_data/texture/testTexture_01.tga
,但实际上在目录中找不到任何.tex文件。 (图像文件所在的/ user_data / texture中应该有.tex文件)我也尝试将其写为
subprocess.Popen('/apps/Linux64/prman-18.0/bin/txmake %s %s'% (outImg, texImg), shell = True)
,但是它不起作用。编辑:我在该软件中实现该代码时,在Maya中运行以下代码
我在某些方面做错了吗?
最佳答案
Popen
是非阻塞的,因此调用返回时它实际上并未完成。因为您要在outImg
调用开始后立即删除Popen
,所以该命令可能会失败。使用subprocess.call
代替,它将阻塞直到命令完成:
subprocess.call(["/apps/Linux64/prman-18.0/bin/txmake", outImg, texImg])