首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何结合shell命令使用python模块

如何结合shell命令使用python模块
EN

Stack Overflow用户
提问于 2019-09-08 11:05:12
回答 1查看 62关注 0票数 1

我想使用shell中的python模块(确切地说,是来自gnuplot的间接模块)。我不想为每个调用编写额外的脚本或实现一些I/O逻辑。

假设作为一个最小的工作示例,我有一个python模块module_foo.py

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/python
def bar():
    print(1,2,3)

我的问题是:

为什么不能像这里这样将模块加载和命令执行结合起来使用python模块?

代码语言:javascript
代码运行次数:0
运行
复制
$ python -m module_foo -c 'bar()'

执行的时候什么都不会发生。但真正起作用的是,只使用这样的命令调用

代码语言:javascript
代码运行次数:0
运行
复制
$ python -c 'import module_foo; module_foo.bar()'
1 2 3

或者这个

代码语言:javascript
代码运行次数:0
运行
复制
$ python -c 'from module_foo import *; bar()'
1 2 3

在加载模块之前,即使是语法错误的命令也被“接受”--而不是执行--我想(对bar的调用没有关闭):

代码语言:javascript
代码运行次数:0
运行
复制
$ python -m module_foo -c 'bar('
$ 

但是,可以使用python单元测试使用-m模块选项(来自python文档):

代码语言:javascript
代码运行次数:0
运行
复制
python -m unittest test_module1 test_module2

python手册对这两个选项都是这样写的:

代码语言:javascript
代码运行次数:0
运行
复制
-c command
Specify the command to execute (see next section).  This terminates the option
list (following options are passed as arguments to the command).
-m module-name
Searches sys.path for the named module and runs the corresponding .py file as
a script.

因此,我希望能够在这个-m ... -c ...中使用路径选项,但不能按反向顺序使用-c ... -m ...‘。我漏掉了什么明显的东西吗?

EN

回答 1

Stack Overflow用户

发布于 2019-09-08 11:13:59

如果您希望您的Python模块是可执行的,并调用函数bar(),则应该将其添加到python文件的末尾:

代码语言:javascript
代码运行次数:0
运行
复制
if __name__ == "__main__":  # this checks that the file is "executed", rather than "imported"

    bar()  # call the function you want to call

然后打电话:

代码语言:javascript
代码运行次数:0
运行
复制
python module_foo.py

如果您想要更多的控制,可以将参数传递给脚本并从sys.argv访问它们。

有关传递给脚本的参数的更多灵活性,请参见argparse解析模块

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57841346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档