首页 > 解决方案 > 如何在 bash shell 中将 myString 分配给导入的 Python 函数?

问题描述

我有一个小的家庭作业网页。我正在尝试每周自动生成网页。

我对此知之甚少。星期三我询问了有关导入我制作的 Python 函数的问题。我想我已经掌握了这个概念。我已经在 Idle 中测试了所有内容。所有模块都工作。

在我的 Python shell 中(我在 Ubuntu 中使用 Idle),一切都按照我的意愿进行。

我首先附加路径:

for i in range(0, len(pyPaths)):
    sys.path.append(pyPaths[i])

然后导入模块:

from makeRBsInlineV1 import makeHTMLrbsNums
from makeCheckboxesInlineV1 import makeHTMLCBs
from makeDropdownboxesInlineV1 import makeDropdownboxes
from createhtmlTableInlineV1 import makeHTMLtable
from makeRBsInlineV2 import makeHTML_RBs
from readLinesTextboxesInlineV1 import readLinesmakeTBs
from makeThankyouPHPInlineV1 import makeThankyouPHP

所有这些模块都返回一个文本字符串,它是 html 标签 + 我的文本的混合体。它在 Firefox 中显示得很好。

在空闲时,我只写,例如:

myString = readLinesTextboxesInlineV3()

它问了我几个问题,然后就走了。之后,myString 就可以放入网页文本字符串中了。

但是,在 bash 中,我不能写

myString = readLinesTextboxesInlineV3()

在 bash 中,我不能写

myString = input('输入你想要的模块名称。')

然后输入,

readLinesTextboxesInlineV3()

因为那 myString 只是输入文本,而不是函数。

每周情况都不一样,我可能需要运行 2 个或更多模块,添加结果字符串,然后将它们写入网页文本字符串的正确位置。

我在一个

而真:

循环,所以我可以添加来自各种模块的字符串。

对于任何给定的一周,我都不知道我想使用哪个模块,所以我让它们都可用。

我有一个所有模块的列表:

pyFiles = ['makeCheckboxesInlineV1()', 'dropdownboxesInlineV1()', 'createhtmlTableInlineV1()', 'makeRBsInlineV2()', 'readLinesTextboxesInlineV3()', 'makeThankyouPHPInlineV1()']

当我在 bash 中运行 makeWebpage.py 时,如何将myString分配给上述任何一个模块?

我试过这个:

pyFiles = [makeHTMLCBs(), makeDropdownboxes(), makeHTMLtable(), makeHTML_RBs(), readLinesmakeTBs(), makeThankyouPHP()]

声明函数列表。麻烦的是,一旦我这样做了,Python 就想立即运行第一个函数。我希望我可以输入一个数字并运行说:

myString = pyFiles[3]

标签: python

解决方案


对您来说最好的解决方案是添加arguments到您的 python 脚本中,该脚本可以添加flag到您的命令行中。
这样,您可以从 shell(示例)中调用您的脚本,如下所示:

python makeWebpage.py --module "makeCheckboxesInlineV1"

Python 标准库提供argparse了满足特定需求的模块。处理 shell 参数并将其转换为 python 变量真的很容易。

我建议您阅读我发现自己非常有用的那篇博客文章。你最需要的部分是argparse 呢?

在你的主目录中添加这样的内容:

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('-m', '--module', action='store_true')
args = parser.parse_args()
module = args.module # The variable module now is a String containing "makeCheckboxesInlineV1"

推荐阅读