从命令行运行函数

559

我有这段代码:

def hello():
    return 'Hi :)'

我该如何直接从命令行运行此程序?


38
可能你的意思是要写print "Hi :)"而不是return 'Hi :)' - Tamás
19个回答

6

如果您使用pip install runp安装了runp软件包,那么运行如下命令即可:

runp myfile.py hello

您可以在https://github.com/vascop/runp找到此存储库。


1
该项目不兼容Python 3。 - Dimitar

3
以下是Odd_Even_function.py文件,其中包含该函数的定义。
def OE(n):
    for a in range(n):
        if a % 2 == 0:
            print(a)
        else:
            print(a, "ODD")

现在,要从命令提示符中调用相同的内容,以下选项对我有用。
选项1 exe\python.exe的完整路径 -c "import Odd_Even_function; Odd_Even_function.OE(100)"
选项2 exe\python.exe的完整路径 -c "from Odd_Even_function import OE; OE(100)"
谢谢。

3

类似这样的内容: call_from_terminal.py

# call_from_terminal.py
# Ex to run from terminal
# ip='"hi"'
# python -c "import call_from_terminal as cft; cft.test_term_fun(${ip})"
# or
# fun_name='call_from_terminal'
# python -c "import ${fun_name} as cft; cft.test_term_fun(${ip})"
def test_term_fun(ip):
    print ip

这在bash中有效。

$ ip='"hi"' ; fun_name='call_from_terminal' 
$ python -c "import ${fun_name} as cft; cft.test_term_fun(${ip})"
hi

2

您可以使用命令行输入python来进入Python环境。

然后使用import example_file导入您的文件。

最后使用example_file.hello()命令运行您的文件。

这样做可以避免每次运行Python-c等命令时出现奇怪的.pyc复制函数。

虽然不像单一命令那样方便,但这是从命令行快速测试文件的好方法,并且可以使用Python调用和执行您的文件。


1

此函数无法从命令行运行,因为它返回一个未处理的值。您可以删除返回语句并使用 print 代替。


0
python3 inspect.signature检索python函数的详细信息。然后使用sys.argv构建一个args列表和一个kwargs字典,然后将其绑定到函数签名。
这使您能够以一种“更加”pythonic的方式调用文件中的函数。
$ python3 myscript.py foo baz
"foo(bar=baz)"

$ python3 myscript.py foo bar=baz
"foo(bar=baz)"

# file: myscript.py

import inspect
import sys

def foo(bar: str):
    print(f"foo(bar={bar}")

if __name__ == "__main__":
    # args[0]  = current file
    # args[1]  = function name
    # args[2:] = function args : (*unpacked)
    func = globals()[sys.argv[1]]
    args = list(arg for arg in sys.argv[2:] if not "=" in arg)
    kwargs = dict(arg.split("=") for arg in sys.argv[2:] if "=" in arg)
    try:
        # Binds / maps the command-line arguments to the function
        bound_arguments = inspect.signature(func).bind(*args, **kwargs)
        func(*bound_arguments.args, **bound_arguments.kwargs)
    except TypeError as e:
        raise e

-1

使用python-c工具(pip install python-c),然后简单地编写:

$ python-c foo 'hello()'

或者在你的Python文件中没有函数名称冲突的情况下:

$ python-c 'hello()'

-3
首先,您必须按照指示调用函数,否则函数将不会在输出中显示任何内容,然后保存文件并通过右键单击文件夹并单击“复制文件”来复制文件的路径,然后转到终端并编写: - cd“文件路径” - python“文件名称,例如(main.py)” 之后,它将显示代码的输出。

-9
让生活变得更加轻松,安装 Spyder。打开文件,然后运行它(点击绿色箭头)。之后你的hello() 方法将被定义并被 IPython 控制台认可,因此你可以从控制台调用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接