在函数中打开另一个.py文件以在Python3.5中传递agruments

时间:2017-06-30 06:22:47

标签: python-3.x sqlite

我对Python很陌生,我正在研究的项目的总体目标是设置一个SQLite数据库,以便将来很容易为非程序员输入(这适用于一小部分人)谁都是技术上的能力)。我现在想要实现此目的的方法是让人们通过简单的文本编辑器将新数据条目保存为.py文件,然后在将值输入数据库的函数中打开.py文件。到目前为止,我有:

    def newEntry(material=None, param=None, value=None):
        if param == 'density':
            print('The density of %s is %s' % (material, value))

    import fileinput
    for line in fileinput.input(files=('testEntry.py'))
        process(line)

然后我用一个简单的文本编辑器创建了一个名为testEntry.py的文件,当在终端中执行newEntry时,该文件有望被newEntry.py调用。这里的想法是,一些用户只需要在函数名称中输入他们在括号内输入的参数。 testEntry.py只是:

    # Some description for future users
    newEntry(material='water', param='density', value='1')

当我在终端中运行newEntry.py时,没有任何反应。是否还有其他方法可以打开并执行另一个我不知道的.py文件?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你的解决方案有效,但正如评论者所说,这是非常不安全的,有更好的方法。假设您的process(...)方法只是执行一些任意的Python代码,这可能会被滥用来执行系统命令,例如删除文件(非常糟糕)。

不要在每行上使用由一系列newEntry(...)组成的.py文件,而是让用户生成包含相应列标题的CSV文件。即。

material,param,value water,density,1

然后解析此csv文件以添加新条目:

with open('entries.csv') as entries:
    csv_reader = csv.reader(entries)
    header = True
    for row in csv_reader:
        if header:  # Skip header
            header = False
            continue
        material = row[0]
        param = row[1]
        value = row[2]
        if param == 'density':
            print('The density of %s is %s' % (material, value))

您的用户可以使用Microsoft Excel,Google表格或任何其他可以导出.csv文件的电子表格软件来创建/编辑这些文件,您可以使用预定义的标题为用户提供模板。