从未指定的目录运行Python文件

时间:2016-11-07 11:21:44

标签: python python-2.7 python-3.x

我正在运行一个名为test.py的python文件。我在名为Model的同一目录中有一个文件夹。在模型内部我有几个其他文件夹(如UserMgmt,GPO,DNS等),每个文件夹包含不同的python程序。现在,我想根据用户选择从UserMgmt或DNS或GPO文件夹运行python程序。我试过了..

    foldername = raw_input('Enter foldername:');
    filename = raw_input('Enter filename:');
    from Model.foldername import filename;

但它显示错误'无效语法'。我必须导入python文件,因为我将使用这些文件中的变量和函数。但是python文件和文件的路径取决于用户。如何在这种情况下导入python文件? 请帮忙... 提前谢谢。

4 个答案:

答案 0 :(得分:1)

您可以使用importlib或imp模块

importlib可以相对于当前目录导入一些模块

import importlib
# foldername need to be in same dir with this script
foldername = raw_input('Enter foldername:')
# enter filename without .py for this case
filename = raw_input('Enter filename:')
test = importlib.import_module(foldername + '.' + filename)
# for example, foldername = 'GPO', filename = 'test'
# this will import GPO\test.py

如果您想从任意路径导入某个文件,可以使用imp模块

import imp
import os
# foldername can be from anywhere
foldername = raw_input('Enter foldername:')
# enter filename with .py for this case
filename = raw_input('Enter filename:')
test = imp.load_source(filename ,os.path.join(foldername, filename))
# for example, foldername = r'C:\NGO', filename = 'test.py'

答案 1 :(得分:0)

您不能使用此语法的变量。

在您的代码中,您实际上是从foldername模块导入文件名。

尝试使用以下代码:

exec("from Model.{} import {}".format(foldername, filename))

答案 2 :(得分:0)

在动态导入方面,importlib.import_module()是您的朋友。但是如果你只想根据它的路径执行给定的python 脚本,你只需使用os.system()execfile()

答案 3 :(得分:-1)

尝试使用__import__(),如果使用python2.7 +或3.1+,最好使用exec