我有这段代码:
def hello():
return 'Hi :)'
我该如何直接从命令行运行此程序?
如果您使用pip install runp
安装了runp软件包,那么运行如下命令即可:
runp myfile.py hello
您可以在https://github.com/vascop/runp找到此存储库。
def OE(n):
for a in range(n):
if a % 2 == 0:
print(a)
else:
print(a, "ODD")
类似这样的内容: 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
您可以使用命令行输入python来进入Python环境。
然后使用import example_file导入您的文件。
最后使用example_file.hello()命令运行您的文件。
这样做可以避免每次运行Python-c等命令时出现奇怪的.pyc复制函数。
虽然不像单一命令那样方便,但这是从命令行快速测试文件的好方法,并且可以使用Python调用和执行您的文件。
此函数无法从命令行运行,因为它返回一个未处理的值。您可以删除返回语句并使用 print 代替。
sys.argv
构建一个args
列表和一个kwargs
字典,然后将其绑定到函数签名。$ 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
使用python-c工具(pip install python-c),然后简单地编写:
$ python-c foo 'hello()'
或者在你的Python文件中没有函数名称冲突的情况下:
$ python-c 'hello()'
hello()
方法将被定义并被 IPython 控制台认可,因此你可以从控制台调用它。
print "Hi :)"
而不是return 'Hi :)'
。 - Tamás