gpt4 book ai didi

python - 如何将 python 模块与 shell 命令结合使用

转载 作者:行者123 更新时间:2023-12-01 07:18:19 25 4
gpt4 key购买 nike

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

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

#!/usr/bin/python
def bar():
print(1,2,3)

我的问题是:

为什么不能像这里一样使用将模块加载和命令执行相结合的Python模块?:

$ python -m module_foo -c 'bar()'

执行后,没有任何反应。但真正有效的是仅使用这样的命令调用

$ python -c 'import module_foo; module_foo.bar()'
1 2 3

或者这个

$ python -c 'from module_foo import *; bar()'
1 2 3

一旦我之前加载了一个模块,即使是语法错误的命令也会被“接受”——我想不会被执行(对 bar 的调用的括号没有关闭):

$ python -m module_foo -c 'bar('
$

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

python -m unittest test_module1 test_module2

Python 手册页对这两个选项都有说明:

-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 ...'。我是否遗漏了一些明显的东西?

最佳答案

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

if __name__ == "__main__":  # this checks that the file is "executed", rather than "imported"

bar() # call the function you want to call

然后调用:

python module_foo.py

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

有关传递给脚本的参数的更多灵 active ,请参阅 argparse module .

关于python - 如何将 python 模块与 shell 命令结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com