如何用str变量在另一个脚本内执行一个脚本?
问题描述:
我曾与Qtdesingner, 在UI蟒蛇做了玛雅项目经理,一个QLineEdit的授权用户填写的脚本的路径运行(变量是:BatchRunScript
) 但似乎不可能导入模块,如果它是一个变量(str
):
import maya.utils
BatchRunScript = 'X:\PathOfTheScript\NameOfScriptToRun.ScriptToRun()'
BatchRunScriptName = BatchRunScript.replace('\\', '/').split('/')[-1]
BatchRunScriptPath = BatchRunScript.replace('\\', '/').split(BatchRunScriptName)[0]
BatchRunModuleName = BatchRunScriptName.split('.')[0]
print 'BatchRunScriptPath: ', BatchRunScriptPath # X:/PathOfTheScript/
print 'BatchRunScriptName: ', BatchRunScriptName # NameOfScriptToRun.ScriptToRun()
print 'BatchRunModuleName: ', BatchRunModuleName # NameOfScriptToRun
sys.path.append(BatchRunScriptPath)
import BatchRunModuleName
maya.utils.executeDeferred(BatchRunScriptName)
它给我这个错误:
Error: ImportError: file <maya console> line 13: No module named BatchRunModuleName
有另一种方式来d从另一个内部运行一个python脚本?
答
额外的考虑之后,我相信@Rawing是正确的,你正试图解决该问题通过以下链接进行澄清:Dynamic module import in Python
我已经离开了我下面的情况下,参考你发现它有用原始响应。不同之处在于,上面的链接显示了如何根据字符串动态地导入脚本,而下面的代码只是基于字符串执行另一个本地python脚本。导入诉执行。
虽然也许它认为是“哈克”你总是可以利用操作系统资源从您的Python客户端中调用上飞其他脚本。
import os
mystr = "myscriptname.py"
os.system('Python ' + mystr)
这将允许您调用其他Python脚本,基于Python文件的字符串名称,并从Python客户端内执行。
你不应该硬编码''Python''这样的,因为它可能是不正确的。更好的做法是使用['sys.executable'(https://docs.python.org/3/library/sys.html#sys.executable),这将永远是正确的。 – martineau
非常感谢您的回答:) – Gnn