在命令行中执行多个python文件

时间:2018-10-03 18:58:25

标签: python-3.x

我有一个使用其他python文件的python代码。我可以使用import语句将第二个文件导入第一个文件,但是目前的情况是我不知道第二个文件将是什么。期望该文件将在Makefile中提供。在C / C ++中,我们可以使用-i / -l选项重新编译。我不确定如何在python中完成类似的工作。

这是示例代码: 有效的方法: myclass.py

class myclass:

def __init__(self):

    self.x = 10

def add(self, num):

    self.x += num

def get(self):

    return self.x

usemyclass.py

import sys

import myclass

c = myclass.myclass()

c.add(10)

print (c.get())

我现在可以通过在usemyclass.py上调用python解释器来运行代码

python usemyclass.py

我想要的是:

usemyclass.py(请勿导入myclass.py,但在调用python时将其传递)

import sys

c = myclass.myclass()


c.add(10)

print (c.get())

现在运行

python myclass.py usemyclass.py(或类似的东西)

我想让用户可以选择传递任何python文件(对必须实现的类结构有所限制)。例如,第二个用户可能会如下所示编写myclass2.py

myclass2.py

class myclass: # They specify the same class name   
    def __init__(self):

        self.x = 1000

    def add(self, num):

        self.x = (self.x + num)%2000

    def get(self):

        return self.x

1 个答案:

答案 0 :(得分:0)

您想要的被称为动态导入。最小的工作代码是:

to_import = 'my_class_1.py'
exec('import {} as myclass'.format(to_import.split('.')[0]))
...

当然,您必须从命令行(例如,使用argparse)解析文件名并正确处理它们。另外,由于文件名是由用户输入的,因此您可能会添加异常处理,以便更紧密地模仿文件名并使其更安全(或者至少要注意使用exec的潜在不安全性)。