我试图用子进程模块(从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])

10-08 00:11