2017-06-21 71 views
1

如何用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脚本?

回答

1

额外的考虑之后,我相信@Rawing是正确的,你正试图解决该问题通过以下链接进行澄清:Dynamic module import in Python

我已经离开了我下面的情况下,参考你发现它有用原始响应。不同之处在于,上面的链接显示了如何根据字符串动态地导入脚本,而下面的代码只是基于字符串执行另一个本地python脚本。导入诉执行。

虽然也许它认为是“哈克”你总是可以利用操作系统资源从您的Python客户端中调用上飞其他脚本。

import os 
mystr = "myscriptname.py" 
os.system('Python ' + mystr) 

这将允许您调用其他Python脚本,基于Python文件的字符串名称,并从Python客户端内执行。

+1

你不应该硬编码''Python''这样的,因为它可能是不正确的。更好的做法是使用['sys.executable'(https://docs.python.org/3/library/sys.html#sys.executable),这将永远是正确的。 – martineau

+0

非常感谢您的回答:) – Gnn

相关问题